如何解决SqlException:必须在ASP.Net中声明标量变量“@RegNo”

时间:2018-02-02 06:55:48

标签: c# asp.net sql-server-2005

 SqlCommand cmd = new SqlCommand("insert into Student(@RegNo,@Name,@Address,@CreatedTime) values(@RegNo,@Name,@Address,Getdate())");

这里显示的错误类似于SqlException:

  

必须声明标量变量“@RegNo”。

该怎么办?感谢

3 个答案:

答案 0 :(得分:2)

protected void Add_Click(object sender, EventArgs e)
{
  string constr = ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
  try {
    using (SqlConnection con = new SqlConnection(constr))
      using (SqlCommand cmd = new SqlCommand("insert into Student(RegNo,Name,Address,CreatedTime)values(@RegNo,@Name,@Address,Getdate())", con)) {
        cmd.Parameters.AddWithValue("@RegNo", RegNo.Text);
        cmd.Parameters.AddWithValue("@Name", Name.Text);
        cmd.Parameters.AddWithValue("@Address", Address.Text);
        con.Open();

        cmd.ExecuteNonQuery();
      }
  } catch (Exception ex) {
    //handle exception..
    throw;
  }
}

显示错误:

  

对象类型System.Web.UI.WebControls.TextBox中不存在任何映射   到已知的托管提供商本机类型。

答案 1 :(得分:1)

让我解释一下你为什么会得到错误。

您的sql命令是:$order=array_replace(array_fill_keys(array_column($array,'id'),$outlier),$order);

这意味着您告诉sql执行与此等效的查询:

SqlCommand cmd = new SqlCommand("insert into Student(@RegNo,@Name,@Address,@CreatedTime) values(@RegNo,@Name,@Address,Getdate())");

你可以看到这是不正确的。

执行insert into Student(@RegNo,@Name,@Address,@CreatedTime) values(1234,'name value','address value',GetDate()) -- i've put some vlaues for example查询时,您需要指定列名称,名称进入第一个括号,值{@ 1}}后的第二个值关键字,逻辑上没有列名“@ RegNo”“@ Name”而是使用数据库“RegNo”中指定的真实列名“名称”,因此查询应如下所示:

insert

为何出现错误消息?

在sql变量中使用Values前缀声明,例如:insert into Student(RegNo,Name,Address,CreatedTime) values(1234,'name value','address value',GetDate())因此,在尝试执行查询时@ declare @a int=5;insert into Student(@RegNo,.......识别为变量,由于无法找到声明,因此收到错误消息

  

必须声明标量变量@RegNo。

您应该仅使用'@'来指定不是列名的参数

在c#代码中试试这个:

sql

!注意:使用@RegNo时,您始终可以先在SqlCommand cmd = new SqlCommand("insert into Student(RegNo,Name,Address,CreatedTime) values(@RegNo,@Name,@Address,@CreatedTime)"); cmd.Parameters.AddWithValue("@RegNo", "object value"); cmd.Parameters.AddWithValue("@Name", "object value"); cmd.Parameters.AddWithValue("@Address", "object value"); cmd.Parameters.AddWithValue("@RegNo", "object value"); cmd.Parameters.AddWithValue("@CreatedTime", DateTime.Now); //replaced GetDate with DateTime.Now 执行查询,看看您没有犯错误

答案 2 :(得分:1)

sql insert查询基本上有2个部分。

1)用于将值插入

的表ColumnNames

2)插入实际值或具有值的@parameters。

你的SQL混合了1和2.

所以而不是

SqlCommand cmd = new SqlCommand("insert into Student(@RegNo,@Name,@Address,@CreatedTime) values(@RegNo,@Name,@Address,Getdate())");

应该是

SqlCommand cmd = new SqlCommand("insert into Student(RegNo,-[Name],Address,CreatedTime) values(@RegNo,@Name,@Address,Getdate())");

在此之后,您只需要在@variables对象中添加所有SqlCommand。我可以看到其他人已经建议你为此代码。