【问题标题】:Right syntax of SqlParameterSqlParameter 的正确语法
【发布时间】:2014-01-01 16:26:53
【问题描述】:

我正在尝试转换:

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

【问题讨论】:

    标签: c# sql database syntax sqlparameter


    【解决方案1】:

    我认为你正在寻找这样的东西;

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

    编辑您的问题后;

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

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

    如果你使用 SQL Server 作为数据库,你应该将你的参数命名为 AddWithValue 并使用相同的名称。

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

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

    SELECT * FROM Customers WHERE CustomerID = ?
    

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

    【讨论】:

    • 我怎么知道要在 @YourParameterName 中插入什么? SqliteParameter 函数非常简单。
    • @Random 这是放置 sql 命令的参数名称。还显示您的 sql 命令以找出您的问题到底是什么。
    • 代码太长,无法发表评论,我无法回答自己的问题,因为我的声誉不到 10 个
    • @Random 只要把你的相关命令部分。您可以随时使用问题下方的edit 按钮编辑您的问题。
    • 在问题中添加了它。另外,另一个问题,为什么WHERE UserID = ?,我的意思是问号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 2017-06-22
    • 2011-08-21
    • 2016-12-28
    • 1970-01-01
    相关资源
    最近更新 更多