asp.net链接access数据库 修改时间字段的问题

时间:2022-04-01 21:42:41
链接access数据库,使用程序修改时间字段的值,不管是直接拼接 还是参数化
总是报错,大家一般都是怎样修改时间字段的值的啊?

32 个解决方案

#1



OleDbParameter parameter = new OleDbParameter(); 
parameter.OleDbType = OleDbType.DBDate;
parameter.Value = DateTime.Now; 
cmd.Parameters.Add(parameter); 
//这样传参数看看

或者你先在程序里面把时间格式转换成string,然后插入。不过不知道拼sql语句要不要转换

#2


其它字段能否修改?如果能,可能你的日期格式错误,

#3


引用 1 楼 nosuchtracter 的回复:
C# code

OleDbParameter parameter = new OleDbParameter(); 
parameter.OleDbType = OleDbType.DBDate;
parameter.Value = DateTime.Now; 
cmd.Parameters.Add(parameter); 
//这样传参数看看


或者你先在程序里面把时间格式转……

我是这样写的 传的是一个参数数组 不过原理和你的一样
OledbParameter[] parameters={
               new OledbParameter("paraName",paraType),
                .......
};
//指定参数的值
parameters[index]=value;
然后调用AccessHelper类中的方法  
只要是带上修改时间字段的都抛异常 只要不修改时间字段 就可以修改成功

#4


2010-5-7这个格式就行么

#5


access中时间是要这么写的
update table set time=#2007-07-08 12:10:00#

他是用##隔开的  你看一下

#6


引用 4 楼 t_long 的回复:
2010-5-7这个格式就行么

现在格式不要紧 只要可以修改就行 
不过最好是能精确到时 分
但是只要能够修改就行 
现在就是修改不了时间字段

#7


  在C#里面DateTime.Now和access里面DateTime.Now格式不一样!

   我以前做过这,只要把格式转换一下就可以了!time
2010-4-7 11:30:03

#8


引用 5 楼 pei2lala 的回复:
access中时间是要这么写的
update table set time=#2007-07-08 12:10:00#

他是用##隔开的 你看一下


是不是拼接sql语句的时候 在时间变量的前后加上'#'号啊?

#9


但是我执行 你上面那条sql语句的时候 提示有语法错误啊?

#10


引用 7 楼 adsdassadfasdfasdf 的回复:
在C#里面DateTime.Now和access里面DateTime.Now格式不一样!

  我以前做过这,只要把格式转换一下就可以了!time
2010-4-7 11:30:03



怎样转换,转换成什么格式啊?

#11


我在ACCESS2000中是这样使用更新数据库的,现在正在使用中,见我的页面: http://nz.oicp.net:81

protected void Button3_Click(object sender, EventArgs e)
    {//修改更新
string i = Request.QueryString["ID"].ToString();//上页传来的ID
int j = Convert.ToInt32(i);
string tabel_name = Session["tabel_name"].ToString();//上页的Session的数据表名

OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OleDb.4.0;Data Source=|DataDirectory|\\studentinfo.mdb");
        conn.Open();
        OleDbDataAdapter da = new OleDbDataAdapter("select * from "+tabel_name+" where id =" + j, conn);
        OleDbCommandBuilder cmd = new OleDbCommandBuilder(da);
        DataSet ds = new DataSet();
        da.Fill(ds, "basic_info");
//...
ds.Tables["basic_info"].Rows[0]["diploma_date"] = TextBox17.Text.ToString();//日期格式:2010-05-08
//...
da.Update(ds, "basic_info"); //更新到数据库
 conn.Close();

}

#12


ds.Tables["basic_info"].Rows[0]["diploma_date"] = TextBox17.Text.ToString();//日期格式:2010-05-08
你数据库里面设定的时间字段是字符串类型的吧?但是我设置的是DateTime类型的。

#13


我设置的 是DateTime类型

#14


Carryontilltomorrow  把你的代码贴出来 看了帮你改一下

#15


后台点击保存时间
 job.Name = txtName.Text;
 job.Request = txtContent.Value;
 if (CheckBox1.Checked)//选上刷新时间的复选框
 {
      job.Time = DateTime.Now;
 }
 result = JobBLL.Update(job);
 if (result > 0)
 {
      Common.showResult(this, "已经成功修改一条招聘信息", "AddJob.aspx");
 }
 else
 {
      Common.showResult(this, "由于某种原因,操作失败,请稍后再试!", "AddJob.aspx");
 }
//BLL层中的方法
public static int Update(Job job)
{
    return JobDAL.Update(job);
}
DAL
 public static int Update(Job job)
        {
            int result = 0;
            OleDbParameter[] parameters ={
                new OleDbParameter("@name",OleDbType.VarChar),
                new OleDbParameter("@request",OleDbType.BSTR),
                new OleDbParameter("@id",OleDbType.Integer),
                new OleDbParameter("@time",OleDbType.DBDate)
            };
            parameters[0].Value = job.Name;
            parameters[1].Value = job.Request;
            parameters[2].Value = job.Id;
            parameters[3].Value = job.Time.ToString();
            String sql = "update job set name=@name,request=@request,time=@time where id=@id";
            result = AccessHelper.ExeSqlReI(sql, parameters);
            return result;
        }

#16


你把参数顺序弄好了,绝对可以成功

#17


OleDbParameter[] parameters ={
  new OleDbParameter("@name",OleDbType.VarChar),
  new OleDbParameter("@request",OleDbType.BSTR),
  new OleDbParameter("@time",OleDbType.DBDate),
  new OleDbParameter("@id",OleDbType.Integer)
 
  };

#18


先试第一种
parameters[3].Value = job.Time.ToString();
改成
parameters[3].Value = job.Time;

有问题的话就试第二种   

String sql = "update job set name=@name,request=@request,time=@time where id=@id";

改成

String sql = "update job set name=@name,request=@request,time=#"+job.Time.ToString()+"# where id=@id";

第二种绝对可以搞定  但是优先试第一种

#19


引用 16 楼 t_long 的回复:
你把参数顺序弄好了,绝对可以成功

不是顺序的问题吧,因为取值的时候都是根据名称赋值的,和创建参数数组的顺序没有多大关系吧!

#20


引用 18 楼 pei2lala 的回复:
先试第一种
parameters[3].Value = job.Time.ToString();
改成
parameters[3].Value = job.Time;

有问题的话就试第二种  

String sql = "update job set name=@name,request=@request,time=@time where id=@id";

改成

St……

我刚开始的时候就是用的第一种方法,但是一直报错,刚才用你的第二种方法试过了,还是不行!

#21


ACCESS是桌面数据库,

...

#22


...

#23


引用 21 楼 gdlpc 的回复:
ACCESS是桌面数据库,

...

这样就不能修改时间字段了吗?

#24


引用 17 楼 t_long 的回复:
OleDbParameter[] parameters ={
  new OleDbParameter("@name",OleDbType.VarChar),
  new OleDbParameter("@request",OleDbType.BSTR),
  new OleDbParameter("@time",OleDbType.DBDate),
  new OleDbParamete……
这个试过了吗?

#25


建议用参数的形式操作.

另外,用参数操作时参数的书写顺序必需和SQL语句中的字段顺序一样,否则不报错但无结果.

另外日期形的要用#包围

#26


那你用断点看一下

job.Time.ToString()  值是多少

顺便把sql 的内容贴上来看一下

#27



<appSettings>
<add key="indexPageExTime" value="0.1"/>
<add key="conAccessString" value="~/school.mdb;"/>
</appSettings>



#region 数据库链接

protected static string connectionString = "provider = microsoft.jet.oledb.4.0;data source =" + System.Web.HttpContext.Current.Server.MapPath(ConfigurationSettings.AppSettings["conAccessString"]);

        #endregion

#28


恩,学习!!!!!

#29


ACCESS数据库的不要用参数和
不能用储存过程

#30


引用 11 楼 gdlpc 的回复:
我在ACCESS2000中是这样使用更新数据库的,现在正在使用中,见我的页面:http://nz.oicp.net:81

protected void Button3_Click(object sender, EventArgs e)
  {//修改更新
string i = Request.QueryString["ID"].ToString();//上页传来的ID
int j = ……
我用的ACCESS2000是可以修改日期时间字段值的,你可以进入我站操作操作: http://nz.oicp.net:81

#31


谢谢大家 问题解决了 好像就是参数顺序 不正确的原因

#32


引用 31 楼 carryontilltomorrow 的回复:
谢谢大家 问题解决了 好像就是参数顺序 不正确的原因

那才给我那么一点儿分????

#1



OleDbParameter parameter = new OleDbParameter(); 
parameter.OleDbType = OleDbType.DBDate;
parameter.Value = DateTime.Now; 
cmd.Parameters.Add(parameter); 
//这样传参数看看

或者你先在程序里面把时间格式转换成string,然后插入。不过不知道拼sql语句要不要转换

#2


其它字段能否修改?如果能,可能你的日期格式错误,

#3


引用 1 楼 nosuchtracter 的回复:
C# code

OleDbParameter parameter = new OleDbParameter(); 
parameter.OleDbType = OleDbType.DBDate;
parameter.Value = DateTime.Now; 
cmd.Parameters.Add(parameter); 
//这样传参数看看


或者你先在程序里面把时间格式转……

我是这样写的 传的是一个参数数组 不过原理和你的一样
OledbParameter[] parameters={
               new OledbParameter("paraName",paraType),
                .......
};
//指定参数的值
parameters[index]=value;
然后调用AccessHelper类中的方法  
只要是带上修改时间字段的都抛异常 只要不修改时间字段 就可以修改成功

#4


2010-5-7这个格式就行么

#5


access中时间是要这么写的
update table set time=#2007-07-08 12:10:00#

他是用##隔开的  你看一下

#6


引用 4 楼 t_long 的回复:
2010-5-7这个格式就行么

现在格式不要紧 只要可以修改就行 
不过最好是能精确到时 分
但是只要能够修改就行 
现在就是修改不了时间字段

#7


  在C#里面DateTime.Now和access里面DateTime.Now格式不一样!

   我以前做过这,只要把格式转换一下就可以了!time
2010-4-7 11:30:03

#8


引用 5 楼 pei2lala 的回复:
access中时间是要这么写的
update table set time=#2007-07-08 12:10:00#

他是用##隔开的 你看一下


是不是拼接sql语句的时候 在时间变量的前后加上'#'号啊?

#9


但是我执行 你上面那条sql语句的时候 提示有语法错误啊?

#10


引用 7 楼 adsdassadfasdfasdf 的回复:
在C#里面DateTime.Now和access里面DateTime.Now格式不一样!

  我以前做过这,只要把格式转换一下就可以了!time
2010-4-7 11:30:03



怎样转换,转换成什么格式啊?

#11


我在ACCESS2000中是这样使用更新数据库的,现在正在使用中,见我的页面: http://nz.oicp.net:81

protected void Button3_Click(object sender, EventArgs e)
    {//修改更新
string i = Request.QueryString["ID"].ToString();//上页传来的ID
int j = Convert.ToInt32(i);
string tabel_name = Session["tabel_name"].ToString();//上页的Session的数据表名

OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OleDb.4.0;Data Source=|DataDirectory|\\studentinfo.mdb");
        conn.Open();
        OleDbDataAdapter da = new OleDbDataAdapter("select * from "+tabel_name+" where id =" + j, conn);
        OleDbCommandBuilder cmd = new OleDbCommandBuilder(da);
        DataSet ds = new DataSet();
        da.Fill(ds, "basic_info");
//...
ds.Tables["basic_info"].Rows[0]["diploma_date"] = TextBox17.Text.ToString();//日期格式:2010-05-08
//...
da.Update(ds, "basic_info"); //更新到数据库
 conn.Close();

}

#12


ds.Tables["basic_info"].Rows[0]["diploma_date"] = TextBox17.Text.ToString();//日期格式:2010-05-08
你数据库里面设定的时间字段是字符串类型的吧?但是我设置的是DateTime类型的。

#13


我设置的 是DateTime类型

#14


Carryontilltomorrow  把你的代码贴出来 看了帮你改一下

#15


后台点击保存时间
 job.Name = txtName.Text;
 job.Request = txtContent.Value;
 if (CheckBox1.Checked)//选上刷新时间的复选框
 {
      job.Time = DateTime.Now;
 }
 result = JobBLL.Update(job);
 if (result > 0)
 {
      Common.showResult(this, "已经成功修改一条招聘信息", "AddJob.aspx");
 }
 else
 {
      Common.showResult(this, "由于某种原因,操作失败,请稍后再试!", "AddJob.aspx");
 }
//BLL层中的方法
public static int Update(Job job)
{
    return JobDAL.Update(job);
}
DAL
 public static int Update(Job job)
        {
            int result = 0;
            OleDbParameter[] parameters ={
                new OleDbParameter("@name",OleDbType.VarChar),
                new OleDbParameter("@request",OleDbType.BSTR),
                new OleDbParameter("@id",OleDbType.Integer),
                new OleDbParameter("@time",OleDbType.DBDate)
            };
            parameters[0].Value = job.Name;
            parameters[1].Value = job.Request;
            parameters[2].Value = job.Id;
            parameters[3].Value = job.Time.ToString();
            String sql = "update job set name=@name,request=@request,time=@time where id=@id";
            result = AccessHelper.ExeSqlReI(sql, parameters);
            return result;
        }

#16


你把参数顺序弄好了,绝对可以成功

#17


OleDbParameter[] parameters ={
  new OleDbParameter("@name",OleDbType.VarChar),
  new OleDbParameter("@request",OleDbType.BSTR),
  new OleDbParameter("@time",OleDbType.DBDate),
  new OleDbParameter("@id",OleDbType.Integer)
 
  };

#18


先试第一种
parameters[3].Value = job.Time.ToString();
改成
parameters[3].Value = job.Time;

有问题的话就试第二种   

String sql = "update job set name=@name,request=@request,time=@time where id=@id";

改成

String sql = "update job set name=@name,request=@request,time=#"+job.Time.ToString()+"# where id=@id";

第二种绝对可以搞定  但是优先试第一种

#19


引用 16 楼 t_long 的回复:
你把参数顺序弄好了,绝对可以成功

不是顺序的问题吧,因为取值的时候都是根据名称赋值的,和创建参数数组的顺序没有多大关系吧!

#20


引用 18 楼 pei2lala 的回复:
先试第一种
parameters[3].Value = job.Time.ToString();
改成
parameters[3].Value = job.Time;

有问题的话就试第二种  

String sql = "update job set name=@name,request=@request,time=@time where id=@id";

改成

St……

我刚开始的时候就是用的第一种方法,但是一直报错,刚才用你的第二种方法试过了,还是不行!

#21


ACCESS是桌面数据库,

...

#22


...

#23


引用 21 楼 gdlpc 的回复:
ACCESS是桌面数据库,

...

这样就不能修改时间字段了吗?

#24


引用 17 楼 t_long 的回复:
OleDbParameter[] parameters ={
  new OleDbParameter("@name",OleDbType.VarChar),
  new OleDbParameter("@request",OleDbType.BSTR),
  new OleDbParameter("@time",OleDbType.DBDate),
  new OleDbParamete……
这个试过了吗?

#25


建议用参数的形式操作.

另外,用参数操作时参数的书写顺序必需和SQL语句中的字段顺序一样,否则不报错但无结果.

另外日期形的要用#包围

#26


那你用断点看一下

job.Time.ToString()  值是多少

顺便把sql 的内容贴上来看一下

#27



<appSettings>
<add key="indexPageExTime" value="0.1"/>
<add key="conAccessString" value="~/school.mdb;"/>
</appSettings>



#region 数据库链接

protected static string connectionString = "provider = microsoft.jet.oledb.4.0;data source =" + System.Web.HttpContext.Current.Server.MapPath(ConfigurationSettings.AppSettings["conAccessString"]);

        #endregion

#28


恩,学习!!!!!

#29


ACCESS数据库的不要用参数和
不能用储存过程

#30


引用 11 楼 gdlpc 的回复:
我在ACCESS2000中是这样使用更新数据库的,现在正在使用中,见我的页面:http://nz.oicp.net:81

protected void Button3_Click(object sender, EventArgs e)
  {//修改更新
string i = Request.QueryString["ID"].ToString();//上页传来的ID
int j = ……
我用的ACCESS2000是可以修改日期时间字段值的,你可以进入我站操作操作: http://nz.oicp.net:81

#31


谢谢大家 问题解决了 好像就是参数顺序 不正确的原因

#32


引用 31 楼 carryontilltomorrow 的回复:
谢谢大家 问题解决了 好像就是参数顺序 不正确的原因

那才给我那么一点儿分????