3

我正在尝试运行一个命令将行插入到我的 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',但未提供该参数。

我看到它的方式是在执行命令之前传递参数。谁能帮我找出缺少的东西?

4

2 回答 2

2

您的问题不是因为您的查询,而是因为变量username 是 NULL。当变量 username 为 null 时,使用 .AddwithValue 不会引发任何错误,但是,它没有设置参数,这就是为什么当您使用该参数时,它返回异常说未提供参数。
使用以下代码,您可以重现您的问题并验证原因。如果你给用户名=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();
            }
于 2013-03-30T07:19:20.537 回答
1

添加:Cmd.CommandType = CommandType.StoredProcedure; 或者,Cmd.CommandType = CommandType.Text;根据要求

于 2018-11-13T10:12:24.660 回答