正确的SqlParameter语法

我正在尝试转换:

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 

全function代码:

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

我觉得你正在寻找一些东西;

 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并使用相同的名称。

使用OleDbCommand ,参数顺序很重要。 因为MSDN说:

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

 SELECT * FROM Customers WHERE CustomerID = ? 

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