-3

当用户使用他的登录时UserName,我将UserName如下代码发送到下一页Page_Load

 lblCmpUserName.Text = Server.UrlDecode(Request.QueryString["Parameter"].ToString());

然后我想将带有用户名的“公司详细信息”存储在 SQL Server 2008 表中。

我得到了错误

必须声明标量变量“@lblCmpUserName”

代码:

    protected void BtnCmpApproval_Click(object sender, EventArgs e)
    {
       SqlConnection SqlCon = new SqlConnection(GetConnectionString());
       string query = "INSERT INTO Company_Info2 VALUES (@lblCmpUserName, @txtCmpName,  @txtRegCountry, @txtCmpRegNo, @txtCmpEstdate,@AFU1, @txtCmpAddress, @ddlAddrIn)";
       try
       {
          SqlCon.Open();

          SqlCommand cmd = new SqlCommand(query, SqlCon);
          cmd.CommandType = CommandType.Text;
          cmd.Parameters.AddWithValue("@UserName", lblCmpUserName.Text);
          cmd.Parameters.AddWithValue("@Cmp_Name", txtCmpName.Text);
          cmd.Parameters.AddWithValue("@Commercial_RegNo", txtRegCountry.Text);
          cmd.Parameters.AddWithValue("@Comm_Country", txtCmpRegNo.Text);
          cmd.Parameters.AddWithValue("@Cmp_EstablishDate", txtCmpEstdate.Text);
          cmd.Parameters.AddWithValue("@Cmp_DocPath", AFU1.FileName);
          cmd.Parameters.AddWithValue("@txtCmpAddress", txtCmpAddress.Text);
          cmd.Parameters.AddWithValue("@ddlAddrIn", ddlAddrIn.SelectedItem.Text);

          cmd.ExecuteNonQuery();
      }
      catch (Exception ex)
      {
         throw new Exception(ex.Message);
      }
      finally
      { 
         SqlCon.Close();
      }
    } 
4

4 回答 4

2

试试这个

protected void BtnCmpApproval_Click(object sender, EventArgs e)
    {
    SqlConnection SqlCon = new SqlConnection(GetConnectionString());
    string query = "INSERT INTO Company_Info2 VALUES (@lblCmpUserName,@txtCmpName,
    @txtRegCountry,@txtCmpRegNo,@txtCmpEstdate,@txtCmpAddress,@ddlAddrIn)";
    try
    {
     SqlCon.Open();
     SqlCommand cmd = new SqlCommand(query, SqlCon);
     cmd.CommandType = CommandType.Text;
     cmd.Parameters.AddWithValue("@lblCmpUserName", lblCmpUserName.Text);
     cmd.Parameters.AddWithValue("@txtCmpName", txtCmpName.Text);
     cmd.Parameters.AddWithValue("@txtRegCountry", txtRegCountry.Text);
     cmd.Parameters.AddWithValue("@txtCmpRegNo", txtCmpRegNo.Text);
     cmd.Parameters.AddWithValue("@txtCmpEstdate", txtCmpEstdate.Text);
     cmd.Parameters.AddWithValue("@Cmp_DocPath", AFU1.FileName);

     cmd.Parameters.AddWithValue("@txtCmpAddress", txtCmpAddress.Text);
     cmd.Parameters.AddWithValue("@ddlAddrIn", ddlAddrIn.SelectedItem.Text);
     cmd.ExecuteNonQuery();
  }
  catch (Exception ex)
  {
     throw new Exception(ex.Message);
  }
  finally
  { 
           SqlCon.Close();
  }
  }

实际上,除了最后两个之外,您添加的参数都与 Query 中存在的参数不匹配。Query & Parameter 中定义的参数添加到命令中使用

cmd.Parameters.AddWithValue(...)

或者

cmd.Parameters.Add(...)

必须相同,否则肯定会出错。

于 2012-06-16T10:08:44.577 回答
2

当您在上面的代码中编写 SqlCommand 时,就像您对 NET Runtime 说的那样。“嘿,我正在将此字符串发送query到 SqlServer,并带有命令集合中存在的参数的占位符。请用您将在集合中找到的参数值替换占位符”。现在 NET 运行时在您的字符串中搜索占位符,但没有与占位符 @lblCmpUserName 对应的参数,因此它会向您抱怨。(NET 停在第一个,但在第一个之后还有更多)

@lblCmpUserName,   -> No match found 
@txtCmpName,       -> No match found
@txtRegCountry,    -> No match found
@txtCmpRegNo,      -> No match found
@txtCmpEstdate,    -> No match found
@txtCmpAddress,    -> Found match 
@ddlAddrIn         -> Found match 

现在您有两个选择,更改占位符以匹配参数名称或更改参数名称以匹配占位符。这是你的选择。

此外,在解析字符串query时,NET 运行时会注意到您有 7 个占位符和 8 个参数。这将是另一个错误。您添加参数@Cmp_DocPath,但字符串没有占位符 -

于 2012-06-16T10:41:07.517 回答
1
@lblCmpUserName

没有匹配的

cmd.Parameters.AddWithValue("@UserName", lblCmpUserName.Text);

线为@lblCmpUserName.

添加这一行:

 cmd.Parameters.AddWithValue("@lblCmpUserName",  lblCmpUserName.Text);

你仍然会得到错误。对于@Parameter您在 sql 语句中添加的每个内容,您都需要有一个匹配的cmd.Parameters.AddWithValue行。

于 2012-06-16T10:05:32.707 回答
0

我得到了解决方案,我在INSERT查询中犯了一个错误。

应该是这样的。

string query="INSERT INTO Company_Info2 VALUES     (@UserName,@Cmp_Name,@Comm_Country,
    @Commercial_RegNo,@Cmp_DocPath,  
    @Cmp_EstablishDate,@Cmp_Address,@IsAddress)";
于 2012-06-17T07:05:48.200 回答