本帖最后由 winsei 于 2009-10-16 13:56:11 编辑

解决方案 »

  1.   

    在操作Access时只能以参数的先后顺序给参数赋值,而不能以参数名来赋值。
    你改成:
    StringBuilder strSql = new StringBuilder();
                    strSql.Append("update Table set ");
                    strSql.Append("Pid=@Pid,");
                    strSql.Append("Start=@Start,");
                    strSql.Append("CEnd=@CEnd");
                    strSql.Append(" where id=@id ");
                    OleDbParameter[] parameters = {
                        new OleDbParameter("@id", OleDbType.Integer,4),
                        new OleDbParameter("@Pid", OleDbType.Integer,4),
                        new OleDbParameter("@Start", OleDbType.Date),
                        new OleDbParameter("@CEnd", OleDbType.Date)};
                    parameters[0].Value = model.Pid;
                    parameters[1].Value = model.Start;
                    parameters[2].Value = model.CEnd;
                    parameters[3].Value = model.id;
    也许你觉得不可思议,但实际上微软在MSDN中就这么说了,我以前也遇到过这个问题。
      

  2.   

    在ADO.NET中使用参数化SQL语句的大同小异
    在ADO.NET中经常需要跟各种数据库打交道,在不实用存储过程的情况下,使用参数化SQL语句一定程度上可以防止SQL注入,同时对一些较难赋值的字段(如在SQL Server中Image字段,在Oracle中Clob字段等)使用参数化SQL语句很容易就能赋值,所以本人经常在ADO.NET中使用参数化SQL语句,近几年来陆续跟SQL Server/Oracle/ MySQL/Access打交道,积累了一些心得,现在整理出来供大家参考。
      

  3.   

     cmd.ExecuteNonQuery(); 返回0,数据库数据无更新。这是为什么?
      

  4.   

    需要说明的是,除了Access之外,操作其它数据库可以不必要按照参数在SQL语句中出现的顺序添加进去一样可以正确执行,但是在Access中一定按照插入的列的顺序添加参数,因为“OLE DB.NET Framework 数据提供程序使用标有问号 (?) 的定位参数,而不使用命名参数(MSDN)”,所以给添加参数和赋值一定要按照列的顺序。
    通过上面的例子,基本上可以总结出一个规律:在参数化SQL中参数名的格式跟其在存储过程中生命存储过程参数一致,例如在Oracle中存储过程参数一律以”:”开头,在MS SQL Server中存储过程参数一律以”@”开头,而在MySQL中存储过程(MySQL从5.0以后版本支持存储过程)参数一律以“?”开头,所以在参数化SQL语句中参数名有些不一样(记得在csdn上有朋友提到过不知道为什么MySQL中参数化SQL语句中要用“?”而不是和SQL Server一样使用”@”),如果那位朋友看过本文,我想他就会解开这个疑虑了。
      

  5.   

    比如数据库里总共只有编号从1到100共100条记录,你来个where id=1000,这样执行肯定返回0.这个返回值表示的是受影响的行数,没有id为1000,自然是0行受影响了。
      

  6.   

    传给 int Update(Table, DbTransaction) 的 dbtran 是 null 哈?
    不是的话,那个 0 岂不就是 SELECT @@IDENTITY 的后果了~
    米有用过命名参数,只能静态分析一下,但楼上辛苦应该没有白费~