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
相关产品推荐
相关产品推荐

