读书人

C#执行带参数sql有关问题

发布时间: 2011-12-21 23:56:01 作者: rapoo

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 = ...;
// ...

[解决办法]
日期格式的字符串在数据库中好象可以默认转换成日期类型

读书人网 >C#

热点推荐