我正在尝试运行单个命令将行插入到我的SQL Server 2012数据库中,但是我的参数不会传递给代码。
con.Open();
string query = @"INSERT INTO [dbo].[Users](Username, Password, Role)
VALUES (@u, @p, @r);";
var cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@u", username);
cmd.Parameters.AddWithValue("@p", password);
cmd.Parameters.AddWithValue("@r", role);
cmd.ExecuteNonQuery();
con.Close();
我通过参数化查询获得SqlException
'(@ u nvarchar(4000),@ p nvarchar(4000),@ r nvarchar(1))INSERT INTO'需要参数'@u',这是未提供的。
我看到它的方式我在执行命令之前传递参数。任何人都可以帮我找出遗漏的东西吗?
答案 0 :(得分:2)
您的问题不是因为您的查询,而是因为变量用户名为NULL 。当你的变量username是null时,它不会在你使用.AddwithValue时抛出任何错误,但是,它没有设置参数,这就是为什么当你使用那个参数时,它返回你的异常说没有提供参数。
使用以下代码,您可以重现您的问题并验证原因。如果你给username = string.Empty,它不会给你这个问题。
string connStr = "Data Source=localhost;Initial Catalog=Adventure;Integrated Security=SSPI";
SqlConnection con = new SqlConnection(connStr);
string username = null;
string password = string.Empty;
string role = string.Empty;
try
{
con.Open();
string query = @"INSERT INTO [dbo].[Users]" + @"(Username ,Password , Role) " + @"VALUES (@u,@p,@r);";
var cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@u", username);
cmd.Parameters.AddWithValue("@p", password);
cmd.Parameters.AddWithValue("@r", role);
cmd.ExecuteNonQuery();
con.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace + ex.Message);
con.Close();
}
答案 1 :(得分:1)
添加:Cmd.CommandType = CommandType.StoredProcedure; 或者,Cmd.CommandType = CommandType.Text;按照要求