在c#中动态设置SQL命令参数DbType?

时间:2011-02-20 00:04:47

标签: c# .net sql sql-server-2008

我似乎在啃这个问题,虽然我可以看到应该如何工作,但我似乎无法看到木头的树木......

基本上我有一种情况,我有一个SQL 2008存储过程..非常基本..简单的varchar和int等。 因为我从javascript获取值/对数据,当然我并不隐含地知道要设置的DbType ..我知道这听起来有点可能,我可以在技术上添加某种标记到fieldname来表示实际类型。

所以现在我正在努力做到以下几点:

(我正在使用企业库数据访问块,但db是数据库对象/连接对象) - val / pairs也来自哈希表..

db.DiscoverParameters(cmd);
IDictionaryEnumerator de;
de = PDMdata.GetEnumerator();
while (de.MoveNext())
{
    DbType ptype = cmd.Parameters[de.Key.ToString()].DbType;
    db.AddInParameter(cmd, de.Key.ToString(), ptype, (ptype)de.Value.ToString());
}

作为参考,db.AddInParameter接受Command对象,param名称,param类型和param值。

正如您所看到的,我正在尝试将值转换为正确的SQL DbType ..但当然它正在尝试使用普通的C#Type ..

将值转换为动态SQL DbType的任何想法

先谢谢你的帮助..

2 个答案:

答案 0 :(得分:3)

SqlCommand.Paramaters集合有一个AddWithValue(String name, Object value)方法...所以如果您愿意,可以完全跳过SqlDbType。

答案 1 :(得分:0)

好的,傻了我..如果我已经检查了前端/中间件的格式/数据质量,那么我可以(因为我使用的是Enterprise Library 5.0).SetParameterValue(cmd,paramname,paramvalue)和参数发现将照顾其余的......

所以基本上不使用Explicit .AddInParameter(需要DbType),上面的解决方案对我有用..在这种情况下你也可以。