Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c#中动态设置SQL命令参数DbType?_C#_.net_Sql_Sql Server 2008 - Fatal编程技术网

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

在c#中动态设置SQL命令参数DbType?,c#,.net,sql,sql-server-2008,C#,.net,Sql,Sql Server 2008,我似乎对这个问题很恼火,虽然我知道它应该如何运作,但我似乎看不到实情 基本上,我有一个SQL 2008存储过程。。非常基本。。简单的varchar和int等。 因为我从javascript获取值/对数据,所以我当然不知道要设置的数据库类型。。我知道这听起来可能有点不对劲,我可以在fieldname中添加某种标记来指示实际的类型 因此,现在我正在尝试做以下工作: (我使用的是企业库数据访问块,但db是数据库对象/连接对象)-val/对也来自哈希表 db.DiscoverParameters(cmd

我似乎对这个问题很恼火,虽然我知道它应该如何运作,但我似乎看不到实情

基本上,我有一个SQL 2008存储过程。。非常基本。。简单的varchar和int等。 因为我从javascript获取值/对数据,所以我当然不知道要设置的数据库类型。。我知道这听起来可能有点不对劲,我可以在fieldname中添加某种标记来指示实际的类型

因此,现在我正在尝试做以下工作:

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

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采用命令对象、参数名称、参数类型和参数值

如您所见,我试图将该值转换为正确的SQL DbType。。但它当然是在尝试使用普通的C型

有没有关于将值转换为动态SQL数据库类型的想法


提前感谢您的帮助。

使用
SqlCommand.Paramaters
集合有一个
AddWithValue(字符串名称、对象值)
方法。。。因此,如果您愿意,可以完全跳过SqlDbType。

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


因此,基本上没有使用Explicit.AddInParameter(它需要DbType),上面的解决方案对我来说是可行的。。在这种情况下,您可能也会遇到麻烦。

您好,谢谢您的回复。。我想我已经了解了一些事情,但不太清楚最后的细节。基本上,我尝试获取DbType的类型代码,然后在转换参数值时,我尝试转换.ChangeType(参数值,类型代码(Db参数))。。。但仍然是这样,因为我似乎得到了AnsiString DbType的int32类型代码。。再次感谢您的回复!这是一个方便的方法,但也是一个危险的方法!如果传入一个空值,会发生什么情况??SQL Server/ADO.NET如何知道要指定的类型??我会非常小心的!!我更喜欢显式地指定我的数据类型以确保安全!如果传递null,sql会将其视为null。。就在那时,我在数据类型和将值转换为正确类型方面遇到了问题。。因此,公平地说,您的答案与我的最终代码db.SetParameterValue(cmd,“@”+de.Key.ToString(),conval)一样正确(conval只是params集合中检查/转换的值)。再次感谢你。