我正在尝试转换:
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;
}
答案 0 :(得分:3)
我认为你正在寻找这个;
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的顺序必须直接对应于命令文本中参数的问号占位符的位置。