【问题标题】:The name '"' does not exist in the current context当前上下文中不存在名称 '"'
【发布时间】:2014-04-22 01:23:53
【问题描述】:

我在代码中遇到了几个错误。这些错误是:

  • 错误 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();
    }

}

【问题讨论】:

  • 您是否已将 using System.Data.SqlClient 添加到您的类导入中?
  • 不,事实上你能告诉我我必须在哪里以及如何放置,因为我还是初学者
  • 在 .cs 文件的顶部,应该有一个包含几行 using System.... 行的块。在该部分输入:using System.Data.SqlClient; 这将使您能够访问您正在使用的类型。在开始将代码复制/粘贴到应用程序中之前,您可能应该回到绝对基础。如果您不知道如何导入命名空间,那么您的其余代码也可能超出您的想象。我敢肯定,如果这是一段剪切/粘贴的代码,即使在 using 之后您也会遇到错误。
  • 感谢您的支持,我之前已经声明过,但它是一样的,我必须回到绝对基础,但我尝试过,但我找不到一个好的资源来开始它。无论如何,非常感谢你。
  • @Simo using 指令和引用/使用来自程序集以外的类型绝对是“基础”主题,请查看 msdn.microsoft.com/en-us/library/ez524kew.aspxmsdn.microsoft.com/en-us/library/sf0df423.aspx

标签: c# asp.net registration


【解决方案1】:

你可能把事情复杂化了。试试下面的代码...

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; 
}

... 其余部分您将遵循我上面提供的其余代码。这将是或多或少正确的方法。并且冒着听起来吹毛求疵的风险,考虑更多信息和格式一致的变量和参数名称。将来可能需要修改您的代码的人会感谢您。

【讨论】:

    猜你喜欢
    • 2013-10-02
    • 2017-06-17
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 2020-11-02
    • 2011-10-19
    相关资源
    最近更新 更多