C#执行带参数sql问题
System.Collections.Hashtable paramsHashTable = new System.Collections.Hashtable();
paramsHashTable.add( "AA ",DataTime.Now);
OleDbCommand command = this.getCommand(procedureName, this.connection);
command.CommandType = CommandType.StoredProcedure;
IDictionaryEnumerator enumerator = paramsHashTable.GetEnumerator();
while (enumerator.MoveNext()) {
OleDbParameter parameter = new OleDbParameter(enumerator.Key.ToString(), enumerator.Value);
command.Parameters.Add(parameter);
}
为什么上面那样写不行?
------解决方案--------------------paramsHashTable.add( "AA ",DataTime.Now); //如果现在是2007-07-18 12:56:00,那么执行此代码后AA的值是2007-07-18 12:56:00
OleDbParameter parameter = new OleDbParameter(enumerator.Key.ToString(), enumerator.Value);
/*然后,这里就变成了new OleDbParameter("AA", "2007-07-18 12:56:00"); 这里2007-07-18 12:56:00是值,又不是参数的类型.当然是错的了.
申明参数的语法的正确形式之一是:OleDbParameter parameter = new OleDbParameter(名称,类型);
*/
------解决方案--------------------OleDbCommand 里的参数,可能不能像SqlCommand一样可以使用命名参数,而一般来说是占位符,也就是说要和Sql语句里的参数位置保持一致而不是名称保持一致。
------解决方案--------------------while (enumerator.MoveNext()) {
OleDbParameter parameter = new OleDbParameter(enumerator.Key.ToString(), enumerator.Value);
command.Parameters.Add(parameter);
==========
哪有这样建参数的?
这样建每个参数默认都是字符型了,长度都有一样,
一个一个的来
// ...
command.Parameters.Add( "AA ", OleDbType.VarChar, 100).Value = ...;
command.Parameters.Add( "BB ", OleDbType.VarChar, 200).Value = ...;
command.Parameters.Add( "CC ", OleDbType.DateTime).Value = ...;
// ...
------解决方案--------------------日期格式的字符串在数据库中好象可以默认转换成日期类型