You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinForms更新列报错:必须声明标量变量@datestring求解决

解决“Must declare the scalar variable "@datestring"”错误的方案

嘿,这个问题其实很常见——你在SQL更新语句里用到了@datestring参数,但没有把这个参数添加到SqlCommand的参数集合中!

你定义的C#本地变量datestring和SQL语句里的@datestring参数完全是两回事:数据库引擎无法识别C#的本地变量,必须通过SqlCommand.Parameters把参数传递给SQL命令,才能让数据库理解这个变量的含义。

修改后的完整代码

private void button2_Click(object sender, EventArgs e) {
    string value = "";
    string connetionString = "Data Source=LENOVO-PC\\CDVI_CENTAUR;Integrated Security=True";
    string sql = null;
    value = listBox1.GetItemText(listBox1.SelectedItem);
    var datestring = dateTimePicker1.Value.ToString("dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);
    var FirstName = value.Split(' ')[0];
    var LastName = value.Split(' ')[1];
    using (System.Data.SqlClient.SqlConnection cnn = new System.Data.SqlClient.SqlConnection(connetionString)) {
        try {
            cnn.Open();
            using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("UPDATE [Centaur3Main].[dbo].[Users] SET [UDText12b] = @datestring WHERE FirstName = @FirstName and LastName = @LastName ", cnn)) {
                // 给所有SQL参数赋值,补上之前漏掉的@datestring
                cmd.Parameters.Add("@FirstName", SqlDbType.NVarChar).Value = FirstName;
                cmd.Parameters.Add("@LastName", SqlDbType.NVarChar).Value = LastName;
                // 关键:把C#的datestring变量绑定到SQL参数@datestring
                cmd.Parameters.Add("@datestring", SqlDbType.NVarChar).Value = datestring;
                
                cmd.ExecuteNonQuery();
            }
        }
        catch (Exception ex) {
            // 建议加上异常捕获,方便后续排查其他问题
            MessageBox.Show($"更新失败:{ex.Message}");
        }
    }
}

额外优化建议

如果UDText12b字段是日期/时间类型(比如SQL Server里的datetime或date),建议直接传递DateTime类型值,而不是转成字符串,这样能彻底避免日期格式兼容问题:

// 去掉ToString转换,直接用DateTimePicker的原始Value值
cmd.Parameters.Add("@datestring", SqlDbType.DateTime).Value = dateTimePicker1.Value;

记住一个核心原则:SQL语句里用到的每个@开头的参数,都必须在SqlCommand.Parameters中添加对应的参数并赋值,这样数据库才能正确识别这些变量。

内容的提问来源于stack exchange,提问作者user3805818

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 17:32:44