string upcmd="UPDATE operation SET cost1=@cost,server1=@server,find1=@find,system1=@system WHERE (code1=@code)";
try
{
this.oleDbConnection1.Open();
this.oleDbCommand1.CommandText=upcmd;
this.oleDbCommand1.ExecuteNonQuery();
this.oleDbConnection1.Close();
}
catch (Exception ex)
{
         this.oleDbConnection1.Close();
         MessageBox.Show("发生以下错误:"+ex.Message);
}前三行是一行.
SET 里并没有写表的全部字段,无法更新(ExecuteNonQuery返回0)!但也不抛出错误.
如果在SET后把表的全部字段全部写全,就能更新!

解决方案 »

  1.   

    !很怪
    试试不用ole的东西,直接用SqlClient的东西看是否可以。我总觉得ole东西不好。
      

  2.   

    to Knight94:
        我用SQL数据库做了个实验,没有这个问题,但我现在用的是ACCESS,怎么办?这个问题.net的BUG吗?
      

  3.   

    我也试了一下,好像不用写全,没出现你的问题,代码如下:
    string strQuery="update typeinfo set typename=@test where typeid='1'";
    OleDbCommand myComm=new OleDbCommand(strQuery,myConn);
    myComm.Parameters.Add("@Test",DateTime.Now.ToString());
    myComm.ExecuteNonQuery();以上执行能更新,并不需要写出所有字段。
      

  4.   


    private System.Data.OleDb.OleDbCommand oleDbCommand1;
    // oleDbCommand1
    // 
    this.oleDbCommand1.Connection = this.oleDbConnection1;this.oleDbCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("@cost", System.Data.OleDb.OleDbType.Boolean));
    this.oleDbCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("@server", System.Data.OleDb.OleDbType.Boolean));
    this.oleDbCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("@find", System.Data.OleDb.OleDbType.Boolean));
    this.oleDbCommand1.Parameters.Add(new System.Data.OleDb.OleDbParameter("@system", System.Data.OleDb.OleDbType.Boolean));
    // 以上为自动生成的代码 oleDbCommand1.Parameters[0].Value=ckb_cost.Checked;
    oleDbCommand1.Parameters[1].Value=ckb_server.Checked;
    oleDbCommand1.Parameters[2].Value=ckb_find.Checked;
    oleDbCommand1.Parameters[3].Value=ckb_system.Checked;
    //为参数赋值有问题吗?请指教,先谢了
      

  5.   

    有可能你的oleDbCommand1前面已经指定过一次了,可能会与以后操作有冲突。
    建议不要用控件,直接用OleDbCommand来声明再试试。
      

  6.   

    to Knight94:
       还是不行呀!比如我更新的是第三个字段(布尔型),SET里没写前两个字段,提示数据类型不匹配,因为前两个字段是varchar型.如果把前两个字段加上去,就没有问题.纳了闷了!
      

  7.   

    问题找到了,在form中我加了一个数据适配器(带参数),Fill了一个数据集,把符合条件的记录显示在一个DataGrid中,把这个数据适配器删除以后,怎么更新都可以.但又一个问题是,需要从DataGrid中选择记录加以更新,所以不能删除,怎么办?
      

  8.   

    对你上面所说的,我有些晕了,怎么更新有的可以有的不可以?
    如果你用的都是控件,有可能在不同地方会造成冲突,建议直接用OleDb声明变量来进行。