C#执行带参数sql问题

ghostkngiht 2007-07-18 12:51:17
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);
}
为什么上面那样写不行?
...全文
378 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghostkngiht 2007-07-18
  • 打赏
  • 举报
回复
问题解决,谢谢各位.
-------------------------
hbxtlhx(平民百姓-自已动手,丰衣足食) 刚开始没理解你的意思,现在理解了,是那个问题,非常感谢.
levenwood 2007-07-18
  • 打赏
  • 举报
回复
日期格式的字符串在数据库中好象可以默认转换成日期类型
xray2005 2007-07-18
  • 打赏
  • 举报
回复
enumerator.Value.Tostring() 这个应该不行,数据库里是日期型字段
--------------
 也存的进入
ghostkngiht 2007-07-18
  • 打赏
  • 举报
回复
必须要指定类型吗?不指定默认都是字符型?
Jinglecat 2007-07-18
  • 打赏
  • 举报
回复
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 = ...;
// ...
ghostkngiht 2007-07-18
  • 打赏
  • 举报
回复
enumerator.Value.Tostring() 这个应该不行,数据库里是日期型字段
xray2005 2007-07-18
  • 打赏
  • 举报
回复
to LZ:
   sorry!我没用过这个构造方法哈!对不起!
   enumerator.Value.Tostring() 试试!
   报什么错误吗?
ghostkngiht 2007-07-18
  • 打赏
  • 举报
回复
而且直接command.Parameters.Add("AA",DataTime.Now);这样写可以.
ghostkngiht 2007-07-18
  • 打赏
  • 举报
回复
现在位置时对的,向paramsHashTable 加字符串没问题,加DataTime就不行
北京的雾霾天 2007-07-18
  • 打赏
  • 举报
回复
OleDbCommand 里的参数,可能不能像SqlCommand一样可以使用命名参数,而一般来说是占位符,也就是说要和Sql语句里的参数位置保持一致而不是名称保持一致。
ghostkngiht 2007-07-18
  • 打赏
  • 举报
回复
OleDbParameter parameter = new OleDbParameter(名称,值);
有这种构造方法的
xray2005 2007-07-18
  • 打赏
  • 举报
回复
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(名称,类型);
*/

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧