名字'"'在当前上下文中不存在
本文关键字:上下文 不存在 quot 名字 | 更新日期: 2023-09-27 17:50:43
我的代码中有几个错误。这些错误是:
- 错误17名称'CommandType'在当前上下文中不存在
- 错误18名称'SqlDbType'在当前上下文中不存在
- 错误35名称"txtCity"在当前上下文中不存在
我希望你能帮助我了解这个错误,并告诉我如何修复它。
protected void btnSave_Click(object sender, EventArgs e)
{
// create connectionstring and insert statment
string connectionString = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
string insertSql = " INSERT INTO UserInfo (UID, FN, LN, Password, RePass, Email, Country,State, City)" +
" values (@UsrNme, @fnbox, @lnamebox, @passtxtbx1, @passtxtbx2, @emailbox, @DrDncoundrlst, @DropDownListSwestate, @citytxtbox)";
// create SQL Connection
SqlConnection con = new SqlConnection(connectionString);
// create sql command and parameters
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.text;
cmd.CommandText = insertSql;
SqlParameter UID = new SqlParameter("@UsrNme", SqlDbType.nvarchar, 50);
UID.Value = txtUID.text.tostring();
cmd.Parameters.Add(UID);
SqlParameter FN = new SqlParameter("@fnbox", SqlDbType.varchar,25);
cmd.Connection = con;
FN.Value = txtfn.text.ToString();
cmd.Parameters.Add(FN);
SqlParameter LN = new SqlParameter("@lnamebox", SqlDbType.varchar, 25);
cmd.Connection = con;
LN.Value = txtLN.text.ToString();
cmd.Parameters.Add(LN);
SqlParameter Password = new SqlParameter("@passtxtbx1", SqlDbType.varchar, 25);
cmd.Connection = con;
Password.Value = txtPassword.text.ToString();
cmd.Parameters.Add(Password);
SqlParameter RePass = new SqlParameter("@passtxtbx2", SqlDbType.varchar, 25);
cmd.Connection = con;
RePass.Value = txtRePass.text.ToString();
cmd.Parameters.Add(RePass);
SqlParameter Email = new SqlParameter("@emailbox", SqlDbType.varchar, 25);
cmd.Connection = con;
Email.Value = txtEmail.text.ToString();
cmd.Parameters.Add(Email);
SqlParameter Country = new SqlParameter("@DrDncoundrlst", SqlDbType.varchar, 25);
cmd.Connection = con;
Country.Value = txtCountry.text.ToString();
cmd.Parameters.Add(Country);
SqlParameter State = new SqlParameter("@DropDownListSwestate", SqlDbType.varchar, 25);
cmd.Connection = con;
State.Value = txtState.text.ToString();
cmd.Parameters.Add(State);
SqlParameter City = new SqlParameter("@citytxtbox", SqlDbType.varchar, 25);
cmd.Connection = con;
City.Value = txtCity.text.ToString();
cmd.Parameters.Add(City);
try
{
con.Open();
cmd.ExecuteNonQuery();
lblmsg.Text = "You already complete your registration process";
}
catch (SqlException ex)
{
string errorMessage = "error in registration user";
errorMessage += ex.Message;
throw new Exception(errorMessage);
}
finally
{
con.Close();
}
}
你可能把事情弄得太复杂了。试试下面的代码…
var connection = new SqlConnection(connectionString);
var cmd = new SqlCommand(insertSql, connection);
cmd.Parameters.AddWithValue("@UsrNme", txtUID.Text.ToString());
cmd.Parameters.AddWithValue("@fnbox", txtfn.Text.ToString());
cmd.Parameters.AddWithValue("@lnamebox", txtLN.Text.ToString());
cmd.Parameters.AddWithValue("@passtxtbx1", txtPassword.Text.ToString());
cmd.Parameters.AddWithValue("@passtxtbx1", txtPassword.Text.ToString());
cmd.Parameters.AddWithValue("@passtxtbx2", txtRePass.Text.ToString());
cmd.Parameters.AddWithValue("@emailbox", txtEmail.Text.ToString());
cmd.Parameters.AddWithValue("@DrDncoundrlst", txtCountry.Text.ToString());
cmd.Parameters.AddWithValue("@DropDownListSwestate", txtState.Text.ToString());
cmd.Parameters.AddWithValue("@citytxtbox", txtCity.Text.ToString());
try
{
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
lblmsg.Text = "You already completed your registration process";
}
catch (SqlException ex)
{
var errorMessage = "error in registration user";
errorMessage += ex.Message;
throw new Exception(errorMessage);
}
finally
{
con.Close();
}
您还需要确保声明了以下using
子句…
using System.Data;
using System.Data.SqlClient;
…并且txtCity
是您实际称为文本框的内容,并且它不会通过private
标识符隐藏此方法,或者实际上出现在不同的形式上,因为您得到的错误意味着变量在方法的范围之外,或者在您到达此方法之前其生命周期已过期。
下面是所有代码的作用。它不需要设置大量不需要声明参数的元数据,而是让SqlCommand为您完成所有艰苦的工作,并根据数据库列、传入的对象类型和参数名称确定类型。如果您最终允许传递无效数据,那么任何精心设计的元数据标记都无法使您避免出现错误。
同样,你真的想看看包装你的insertSql
到一个存储过程,就像在Sql Server…
create procedure adduserinfo @UsrNme nvarchar (50),
@fnbox varchar (25),
@lnamebox varchar (25),
@passtxtbx1 varchar (25),
@passtxtbx2 varchar (25),
@emailbox varchar (25),
@DrDncoundrlst varchar (25),
@DropDownListSwestate varchar (25),
@citytxtbox varchar (25)
as begin
INSERT INTO UserInfo
( UID,
FN,
LN,
Password,
RePass,
Email,
Country,
State,
City )
VALUES
( @UsrNme,
@fnbox,
@lnamebox,
@passtxtbx1,
@passtxtbx2,
@emailbox,
@DrDncoundrlst,
@DropDownListSwestate,
@citytxtbox )
end
go
那么你的SqlCommand
声明看起来像这样…
var command = new SqlCommand("adduserinfo", connection)
{
CommandType = CommandType.StoredProcedure;
}
…至于其余部分,您可以按照我上面提供的其余代码进行操作。这或多或少是做这件事的适当方法。冒着听起来很挑剔的风险,考虑更多信息和一致格式的变量和参数名称。那些将来可能需要修改你代码的人会感谢你的。