小编典典

SqlParameter的正确语法

sql

我正在尝试转换:

command.Parameters.Add (new SqliteParameter (DbType.Int32) { Value = id });

到一个普通的SqlParameter:

command.Parameters.Add(new SqlParameter(DbType.Int32) { Value = id });

除了这行之外,我现在设法转换了每一行,但出现了以下错误:

Error   3   Argument 1: cannot convert from 'System.Data.DbType' to 'object[]'
Error   2   The best overloaded method match for 'System.Data.SqlClient.SqlParameter.SqlParameter(object[])' has some invalid arguments

全功能代码:

public User GetUser(int id)
{
    var u = new User();
    lock (locker)
    {
        connection = new SqlConnection("Data Source=" + path + ";Initial Catalog=DB;User ID=sa;Password=***********th");
        connection.Open();
        using (var command = connection.CreateCommand())
        {
            command.CommandText = "Select * from tblUsers WHERE UserID = ?";
            command.Parameters.Add(new SqlParameter(DbType.Int32) { Value = id });
            var r = command.ExecuteReader();
            while (r.Read())
            {
                u = FromReader(r);
                break;
            }
        }
        connection.Close();
    }
    return u;
}

阅读 223

收藏
2021-04-14

共1个答案

小编典典

我认为您正在寻找的东西;

command.Parameters.Add(new SqlParameter("@YourParameterName", SqlDbType.Int32).Value = id;

编辑完问题后;

您可以使用AddWithValue方法。Add(String, Object)方法已过时。喜欢;

command.CommandText = "Select * from tblUsers WHERE UserID = @id";
command.Parameters.AddWithValue("@id", id);

如果将SQL Server用作数据库,则应AddWithValue使用相同的名称命名参数add to 。

使用时OleDbCommand,参数的顺序很重要。因为如上MSDN所说:

当CommandType设置为Text时,OLE DB .NET
Provider不支持将命名参数传递给SQL语句或OleDbCommand调用的存储过程的命名参数。在这种情况下,必须使用问号(?)占位符。例如:

SELECT * FROM Customers WHERE CustomerID = ?

因此,将OleDbParameter对象添加到OleDbParameterCollection的顺序必须直接对应于命令文本中参数的问号占位符的位置。

2021-04-14