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);

sql server - c#:在运行时创建SQLParameter

像这样:

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类型的语法,但我不确定它的优势是什么(除了提醒您),因为无论赋值如何,都不会得到类型警告,甚至在尝试执行命令之前都会出现异常。