System.Data.SqlClient.SqlException:'必须声明标量变量“@SSN”

Posted

技术标签:

【中文标题】System.Data.SqlClient.SqlException:\'必须声明标量变量“@SSN”【英文标题】:System.Data.SqlClient.SqlException: 'Must declare the scalar variable "@SSN"System.Data.SqlClient.SqlException:'必须声明标量变量“@SSN” 【发布时间】:2021-11-28 09:12:19 【问题描述】:

我正在用 C# 开发一个 Windows 窗体应用程序。我一直在 SQL Server 中加密列。

我的目标是从表单中的datagridview中拉取数据并显示数据。

我想使用 where 运算符提取数据并将其显示在 datagridview 中,但出现以下错误。 有没有办法做到这一点?

如果你能帮忙,我会很高兴!

错误

System.Data.SqlClient.SqlException: '必须声明标量变量“@SSN”。

代码:

private void btnSearch_Click(object sender, EventArgs e)

    con = new SqlConnection("Data Source = " + IP + "; Initial Catalog = " + db + ";  Persist Security Info = False; User ID = " + username + "; Password = " + password + ";Column Encryption Setting = Enabled;");

    using (SqlCommand cmd = con.CreateCommand())
    
        cmd.CommandText = @"SELECT* FROM AE WHERE TEST_TYPE = @SSN";

        SqlParameter paramSSN = cmd.CreateParameter();
        paramSSN.ParameterName = @"@SSN";
        //paramSSN.ParameterName = "@SSN";
        paramSSN.DbType = DbType.AnsiStringFixedLength;
        paramSSN.Direction = ParameterDirection.Input;
        paramSSN.Value = "'INITIAL_TEST'";
        paramSSN.Size = 18;

        DataSet data_set = new DataSet(cmd.CommandText);
        dataAdapter = new SqlDataAdapter(cmd.CommandText,con);

        SqlCommandBuilder commandbuild = new SqlCommandBuilder(dataAdapter);
        dataAdapter.Fill(data_set);

        dataGridView1.DataSource = data_set.Tables[0].DefaultView;
        int rowCount = data_set.Tables[0].Rows.Count;
        label6.Text = rowCount.ToString();//Total record 
        con.Close();
    

【问题讨论】:

你需要将参数添加到命令中,所以更容易做到cmd.Parameters.Add("@SSN", SqlDbType.VarChar, 18).Value = "INITIAL_TEST"。您可能想要不带单引号的 "INITIAL_TEST"。旁注:您需要在 condataAdapter 对象上使用 using 您没有在 sqlCommand 中定义 @SSN 变量,只是在您的 C# 命令中使用。我认为您想将其用作输入参数,但此处 sqlCommand 将其视为变量而不是输入。你必须给它增加一些价值。它没有定义(Declare @SSN int)并设置了一些值。 @Charlieface 我试过你说的。问题解决了。谢谢。 【参考方案1】:

当我像这样更改我的代码时,错误消失了。我找到了解决方案。

        ConnectionString();
        using (SqlCommand cmd = con.CreateCommand())
        
            cmd.CommandText = @"SELECT* FROM AE WHERE "+comboBox1.Text+" = 
            @SSN";

            SqlParameter paramSSN = cmd.CreateParameter();
            DataSet data_set = new DataSet(cmd.CommandText);
            dataAdapter = new SqlDataAdapter(cmd.CommandText,con);
            dataAdapter.SelectCommand.Parameters.Add("@SSN", 
            SqlDbType.VarChar,18).Value = textBox2.Text;

            SqlCommandBuilder commandbuild = new SqlCommandBuilder(dataAdapter);
            dataAdapter.Fill(data_set);
            dataGridView1.DataSource = data_set.Tables[0].DefaultView;
            int rowCount = data_set.Tables[0].Rows.Count;
            label6.Text = rowCount.ToString();//Total record 
            con.Close();
        

      

【讨论】:

请考虑在您的答案中添加解释,以便每个人都可以从中学习

以上是关于System.Data.SqlClient.SqlException:'必须声明标量变量“@SSN”的主要内容,如果未能解决你的问题,请参考以下文章