当用户使用他的UserName
登录时,我会将UserName
发送到下一页,如下面代码Page_Load
lblCmpUserName.Text = Server.UrlDecode(Request.QueryString["Parameter"].ToString());
然后我想将“公司详细信息”与UserName存储在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();
}
}
答案 0 :(得分: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&中定义的参数使用
添加到命令的参数cmd.Parameters.AddWithValue(...)
或
cmd.Parameters.Add(...)
必须相同,否则肯定会出错。
答案 1 :(得分:2)
当您在上面的代码中编写SqlCommand时,就像您对.NET Runtime说的那样。 “嘿,我将这个字符串query
发送到SqlServer,并在命令集合中显示参数的占位符。请使用您在集合中找到的参数值替换占位符”。现在,NET Runtime会搜索你的字符串中的占位符,但没有参数对应占位符@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
但字符串没有占位符 -
答案 2 :(得分:1)
@lblCmpUserName
没有匹配的
cmd.Parameters.AddWithValue("@UserName", lblCmpUserName.Text);
@lblCmpUserName.
添加以下行:
cmd.Parameters.AddWithValue("@lblCmpUserName", lblCmpUserName.Text);
你仍然会犯错误。对于在sql语句中添加的每个@Parameter
,您需要匹配cmd.Parameters.AddWithValue
行。
答案 3 :(得分:0)
我得到了解决方案,我在INSERT
查询中犯了一个错误。
应该是这样的。
string query="INSERT INTO Company_Info2 VALUES (@UserName,@Cmp_Name,@Comm_Country,
@Commercial_RegNo,@Cmp_DocPath,
@Cmp_EstablishDate,@Cmp_Address,@IsAddress)";