辅导:在OleDbCommand中使用参数查询时,添加到Parameters集合中的顺序需要和OleDbCommand中参
来源:优易学  2011-11-21 10:51:26   【优易学:中国教育考试门户网】   资料下载   IT书店
  很多地方莫名其妙地出错,可能是因为自己用习惯了SQLCOMMAND,改成用Access数据库就不习惯了。
  OleDbCommand Cmmand = new OleDbCommand();
  Cmmand.CommandText = "UPDATE " + TABLENAME + " SET [number]=@number,"
  +"SaleState=@SaleState,"
  +"SaleTime=@SaleTime,"
  +"MachineCode=@MachineCode,"
  +"LicenceCode=@LicenceCode "
  +"WHERE [number]=@number";
  Cmmand.Parameters.Add("@number", OleDbType.VarChar, 20).Value=info.number;
  Cmmand.Parameters.Add("@SaleState", OleDbType.Boolean).Value = info.SaleState;
  Cmmand.Parameters.Add("@MachineCode", OleDbType.BigInt).Value = info.MachineCode;
  Cmmand.Parameters.Add("@SaleTime", OleDbType.VarChar,20).Value = info.SaleTime.ToString();
  Cmmand.Parameters.Add("@LicenceCode", OleDbType.VarChar, 10).Value = info.LicenceCode;
  return this.DbHelper.ExecuteNonQuery(Cmmand);
  请看上面这段代码,上面的参数并不是顺序对应的,看清楚了没,@SaleTime和@MachineCode出现顺序发生了错位,
  结果,以上这段代码放在任何地方都会抛出个OledbException出来.说“数据类型不正确这类的”,因为@SaleTime是datetime类型,@MachineCode是bigint类型,当然会抛出异常啊
  在OleDbCommand 和OdbcCommand中使用参数
  在OleDbCommand或者OdbcCommand中使用参数时,参数添加到Parameters集合中的顺序必须和存储过程中参数定义的顺序匹配。OLE DB和ODBC的.NET Framework数据供应程序将存储过程的参数视为占位符,按照顺序来给参数赋值。另外,返回参数必须是第一个被加入到Parameters集合中的参数。
  OLE DB和ODBC的.NET Framework数据供应程序不提供使用命名参数来向SQL语句或存储过程传递参数。青年人网提示必须使用问号(?)占位符,就像下面一样:
  SELECT * FROM Customers WHERE CustomerID = ?
  因此,向 Parameters 集合添加 Parameter 对象的顺序必须直接对应于该参数的问号占位符的位置。
  导出参数信息
  参数也可以使用 CommandBuilder 类从存储过程导出。SqlCommandBuilder 和 OleDbCommandBuilder 类都提供了静态方法 DeriveParameters,该静态方法将自动使用存储过程中的参数信息填充 Command 对象的 Parameters 集合。请注意,DeriveParameters 将改写 Command 的任何现有参数信息。
  导出参数信息时需要经历一个到数据源的附加行程,以获取参数信息。如果参数信息在设计时是已知的,则可以通过显式设置参数来提高应用程序的性能。

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训