小弟新学,做了个简单的登陆界面,运行时出现错误,请帮忙解决。
protected void Button1_Click(object sender, EventArgs e)
    {
        if (this.TextBox2.Text != "")
        {
            if (this.TextBox1.Text != "")
            {
                string sql;
                sql =string.Format( "select * from User where Name='" + this.TextBox2.Text.Trim()+ "' and PassWord='" + this.TextBox1.Text.Trim() + "'");
                try
                {
                    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["巡检系统数据库ConnectionString"].ConnectionString);
                    conn.Open();
                    SqlCommand cmd=new SqlCommand(sql,conn);
                    cmd.Connection = conn;
                    int state=Convert.ToInt32(cmd.ExecuteScalar());
                    if(state==0||state>1)
                    {
                        this.Label3.Text="用户不存在,请检测用户名和密码是否正确!";
                    }
                    else
                    {
                        this.Label3.Text="登录成功!";
                    }
                    conn.Close();
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.ToString());
                }
            }
            else
            {
                this.Label3.Text = "请输入密码!";
            }
        }
        else
        {
            this.Label3.Text = "请选择用户!";
        }
    }
}运行程序,页面可以打开,输入用户名和密码后,点确定,提示如下“/巡检系统”应用程序中的服务器错误。
--------------------------------------------------------------------------------System.Data.SqlClient.SqlException: 关键字 'User' 附近有语法错误。
  在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
  在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
  在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
  在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
  在 System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
  在 System.Data.SqlClient.SqlDataReader.get_MetaData()
  在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
  在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
  在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
  在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
  在 System.Data.SqlClient.SqlCommand.ExecuteScalar()
  在 Login.Button1_Click(Object sender, EventArgs e) 这个是什么意思呀?

解决方案 »

  1.   

    User可能是SQLSERVER内部使用的关键字,改成:
    sql =string.Format( "select * from [User] where Name='" + this.TextBox2.Text.Trim()+ "' and PassWord='" + this.TextBox1.Text.Trim() + "'");试试。
      

  2.   

    按照上面的改了,又提示这样的错误。“/巡检系统”应用程序中的服务器错误。
    --------------------------------------------------------------------------------System.Data.SqlClient.SqlException: 数据类型 text 和 varchar 在 equal to 运算符中不兼容。
      在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
      在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
      在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
      在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
      在 System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
      在 System.Data.SqlClient.SqlDataReader.get_MetaData()
      在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
      在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
      在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
      在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
      在 System.Data.SqlClient.SqlCommand.ExecuteScalar()
      在 Login.Button1_Click(Object sender, EventArgs e) 
      

  3.   

    User表的架构是什么啊,先加上架构名试试,如果还是不行,可能是与sqlserver内部的关键字冲突了吧,改个名儿
      

  4.   

    改成:
    sql =string.Format( "select count(*) from [User] where Name='" + this.TextBox2.Text.Trim()+ "' and PassWord='" + this.TextBox1.Text.Trim() + "'");
      

  5.   

    protected void Button1_Click(object sender, EventArgs e)
      {
      if (this.TextBox2.Text != "")
      {
      if (this.TextBox1.Text != "")
      {
      string sql;
      sql =string.Format( "select count(*) from [User] where [Name]='" + this.TextBox2.Text.Trim()+ "' and [PassWord]='" + this.TextBox1.Text.Trim() + "'");
      try
      {
      SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["巡检系统数据库ConnectionString"].ConnectionString);
      conn.Open();
      SqlCommand cmd=new SqlCommand(sql,conn);
      cmd.Connection = conn;
      int state=Convert.ToInt32(cmd.ExecuteScalar());
      if(state==0||state>1)
      {
      this.Label3.Text="用户不存在,请检测用户名和密码是否正确!";
      }
      else
      {
      this.Label3.Text="登录成功!";
      }
      conn.Close();
      }
      catch (Exception ex)
      {
      throw new Exception(ex.ToString());
      }
      }
      else
      {
      this.Label3.Text = "请输入密码!";
      }
      }
      else
      {
      this.Label3.Text = "请选择用户!";
      }
      }
    }
      

  6.   

    sql =string.Format( "select count(*) from [User] where [Name]='" + this.TextBox2.Text.Trim()+ "' and [PassWord]='" + this.TextBox1.Text.Trim() + "'");=============>
    sql =string.Format( "select count(*) from [User] where [Name]='{0}' and [PassWord]='{1}'",this.TextBox2.Text.Trim(),this.TextBox1.Text.Trim()+ );
      

  7.   

    肿么回事?多了个+sql =string.Format( "select count(*) from [User] where [Name]='" + this.TextBox2.Text.Trim()+ "' and [PassWord]='" + this.TextBox1.Text.Trim() + "'");=============>
    sql =string.Format( "select count(*) from [User] where [Name]='{0}' and [PassWord]='{1}'",this.TextBox2.Text.Trim(),this.TextBox1.Text.Trim());
      

  8.   

    还是提示
    System.Data.SqlClient.SqlException: 数据类型 text 和 varchar 在 equal to 运算符中不兼容。谁有可用的代码,我想学学呀。新手悲催。。
      

  9.   

    OK了,谢谢大家了,是我在表定义的时候,Name和PassWord定义成Text了,现在改成了varchar(50)就好了,谢谢大家的帮助
      

  10.   

    你的Name 和PassWord字段是不是设置的是Text类型,他是不能比较的。需要转换一下Convert, 或者把字段类型换成varchar或者nvarchar