sql server - c#:在运行时创建SQLParameter
本文关键字:运行时 创建 SQLParameter server sql | 更新日期: 2023-09-27 17:53:03
我很好奇是否有可能在运行时创建SQLParameter并将其添加到SQLCommand中。
我要做的是:
public void addParameters(string paramName, paramType, SqlParameter paramCommand)
{
SqlParameter myParameter = new SqlParameter("@" + paramName, paramType);
paramCommand.Parameters.Add(myParameter);
}
问题是传递paramType,它是SqlDbType和我不知道:
1。如何在这里实现/使用它
2.何时调用这个函数。
注意:我只是想添加参数到我的SQLCommand对象。就像这样:
SqlParameter myParameter = new SqlParameter("@user", SqlDbType.Char);
像这样:
public static class CommandExtensions
{
public static void AddParameter(this IDbCommand command, string name, object value)
{
if (command == null) throw new ArgumentNullException("command");
if (name == null) throw new ArgumentNullException("name");
var p = command.CreateParameter();
p.ParameterName = name;
p.Value = value ?? DBNull.Value;
command.Parameters.Add(p);
}
}
允许您:
using (var command = connection.CreateCommand())
{
command.CommandText = "SELECT * FROM Users WHERE FirstName LIKE @name";
command.AddParameter("name", "J%");
// [...]
}
该代码也独立于ADO。NET驱动程序,因此可以在大多数使用ADO.NET的项目中重用。如果您想了解更多关于编写可重用ADO的信息。. NET代码,阅读我的文章:http://blog.gauffin.org/2013/01/ado-net-the-right-way/
问题是传递paramType,它是SqlDbType,我不知道
通常不需要指定db类型。
你的方法是正确的:
cmd.Parameters.Add(new SqlParameter("@Name", "Frank Rizzo"));
需要注意的是,SqlParameter构造函数提供了许多重载,使得创建一个单独的函数来返回新的SqlParameter在很大程度上是不必要的。
除了jgauffin的回答:
在构造SqlParameter时,如果不确定参数的SqlDbType,可以使用SqlParameter构造函数,它只接受参数名和值作为参数。即;SqlParameter Constructor (String, Object).
为了MSDN文档,
当在value参数中指定Object时,SqlDbType为从microsoft.net Framework中推断出对象的类型。
有许多方法可以在ADO.NET中添加SQL参数。通常不需要提供SQL数据库类型,因为数据是作为字符串发送的,并由SQL server隐式转换。
MSDN引用以下示例-
command.Parameters.Add("@ID", SqlDbType.Int);
command.Parameters["@ID"].Value = customerID;
// Use AddWithValue to assign Demographics.
// SQL Server will implicitly convert strings into XML.
command.Parameters.AddWithValue("@demographics", demoXml);
第一个例子也可以写成-
command.Parameters.Add("@ID", SqlDbType.Int).Value = customerID;
参见http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters(v=vs.100).aspx。
显然,提供与SQL数据类型不匹配的数据将导致SQL异常,您应该设置长度限制并验证输入,使用"as"语法将其转换为本地兼容的类型可能很有用,就像正则表达式一样。
jgauffin的回答可以很容易地适应使用包含DB类型的语法,但我不确定它的优势是什么(除了提醒您),因为无论赋值如何,都不会得到类型警告,甚至在尝试执行命令之前都会出现异常。