一段简单代码操作ACCESS表bm ,就两个字段:bm_id 自动增加的长整型,bm_name char(10)
表里就几条记录
bm_id      bm_name
1          a
2          b
3          c
4          d
<1>string sql_string = "delete from bm where bm_id=3";
<2>string sql_string = "update bm set bm_name='aaa' where bm_id=2";
                    OleDbConnection olecon = DB.dbconnection();
                    try
                    {
                        olecon.Open();                        OleDbCommand sqlcom = new OleDbCommand(sql_string, olecon);                        sqlcom.ExecuteNonQuery();                        sqlcom.Dispose();                    }
                    catch (Exception ee)
                    {
                        Label1.Text = ee.Message;
                    }
                    finally
                    {
                        olecon.Close();
                    }
执行<1>是正常的,执行<2>不成功
百思不得其解

解决方案 »

  1.   

    问题出在bm_name char(10)上面,bm_name字段的值长度不足10的话,会以空格填充。应该改为文本型或varchar型(access里为文本型)。
      

  2.   

    文本型OleDbConnection cn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=demo.mdb");
    string strSql = "UPDATE [bm] SET [bm_name]=? WHERE ID=? ";
    OleDbCommand cmd = new OleDbCommand(strSql, cn);
    cmd.Parameters.AddWithValue("?", textBox2.Text);
    cmd.Parameters.AddWithValue("?", textBox1.Text);
    cn.Open();
    cmd.ExecuteNonQuery();
    cn.Close();
      

  3.   

    谢谢dalmeeme,我定义的bm_name就是文本类型.不过其他数据库的话,定义成CHAR也应该没问题呀
      

  4.   

    另外我用sql_string="insert into bm (bm_name) values ('aaa')来插入一条记录也是正常的
      

  5.   

    char型是定长的字符串,char(10)的字段存储一个字符a的话,会自动用空格填充,补足空位,变成"a          "
      

  6.   

    插入操作当然是没问题的,会自动填充空格的。但update要判断where条件,你的条件应该是不成立。
      

  7.   

    哦,sorry,我看错了,条件是长整型的。
      

  8.   

    dalmeeme,被你说糊涂了.update bm set bm_name='aaa' where bm_id=3  条件bm_id=3的记录有的,bm_name字段是文本有10个长,存'aaa'也应该没问题,我还是不懂,能详细说说吗
      

  9.   

    修改后数据是否正确,SQL语句是没问题的
      

  10.   

    你把update的条件去掉,update bm set bm_name='aaa'
    看看是否会更新全部记录。
      

  11.   

    去掉条件,UPDATE是可以全部更新的.另外我测试了传参数的办法,也不行.忘记说报错了,UPDATE时候不能执行成功,我捕捉到的错误是"OLE Automation 内部错误"
      

  12.   

    各位兄弟,难道我的ACCESS有问题?
      

  13.   

    我在ACCESS里直接执行这条SQL也可以更新,晕,真是怪了
      

  14.   

    你的Access是什么版本的,连接字符串是什么?
      

  15.   

    我的ACCESS是2003的,帮朋友写个网页,连接字符串是string con_str = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|sddb.mdb";
      

  16.   

    明天上班用单位的机器试下,谢谢dalmeeme,明天结帖
      

  17.   

    我怀疑是我的ACCESS或者是什么地方有问题
      

  18.   

    我在自己的机器上测试了一下,除了数据库名字不同外,其他基本都相同,有条件地更新成功。
    说明应该是数据库有问题,或是.net底层引擎出问题。肯定不是程序代码问题。
      

  19.   

    update [bm] set bm_name='aaa' where bm_id=2 sql语句表要加[] access 操作sql语句不规范也可能执行不了
      

  20.   

    具体是什么错误提示呀,
    string sql_string = "update bm set bm_name='aaa' where bm_id=2";
    单引号,是不是有问题呀
      

  21.   

    谢谢大家,确定是我计算机上的ACCESS有问题或者系统数据访问组件有问题了,别的机器是好的,这两天我把CSDN密码给忘记了,一直试到今天才对,NND,结贴