【问题标题】:check if user exists in my database检查用户是否存在于我的数据库中
【发布时间】:2013-12-16 05:31:57
【问题描述】:

我有一个有两个文本框的 c# 登录论坛

1.用户名

2.密码

我正在尝试检查用户是否存在于我的 Oracle 数据库中。如果是这样,我希望它做一些事情(比如打电话给另一个论坛等......),但我收到一条错误消息,说我缺少表达式。有什么问题?

private void button1_Click(object sender, EventArgs e)
{
    isUserExist(textBox1.Text,textBox2.Text);
}

public bool isUserExist(string username,string password)
{
    try
    {
        string connstring = "data source=test_db;user id=system;password=password;";
        string statementcmd = "SELECT * FROM register_user Where UserName=@username";

        OracleConnection conn = new OracleConnection(connstring);
        OracleCommand cmd = new OracleCommand();
        cmd.Connection = conn;
        cmd.CommandText = statementcmd;
        cmd.Parameters.Add("@username", username);
        if (conn.State != ConnectionState.Open)
        {
            conn.Open();
            OracleDataReader reader = cmd.ExecuteReader();

            if (!reader.HasRows)
            { MessageBox.Show("User Name Not Found"); }

            if (!password.Equals(reader["password"].ToString()))
                 MessageBox.Show("Incorrect Password");
            reader.Close();
            }
            return true;

        }
    catch (Exception ex)
    {
        MessageBox.Show(ex.ToString());
        return false;
    }

}

【问题讨论】:

    标签: c# database oracle11g


    【解决方案1】:

    在尝试访问属性之前,您需要调用 DataReader 上的 Read 方法。

    if (reader.Read())
    {
        // Do stuff
    }
    

    祝你好运!

    【讨论】:

      【解决方案2】:

      1.您需要先分配parameters,然后再将命令字符串分配给CommandText
      2.您需要调用Read() OracleDataReader对象reader 在访问records 之前。
      3. 只有在找到用户时才应在true 时返回true。(在第二个条件下,如果缺少打开的花括号)。4. 您可以对程序中的所有IDisposable 实现的类使用using{} 块,以便处理它们的对象disposal。(因此您无需调用@ 987654331@ ConnectionCommand 对象)

      完整解决方案:

      public bool isUserExist(string username,string password)
      {
          bool status=false;
          try
          {
              string connstring = "data source=test_db;user id=system;password=password;";
              string statementcmd = "SELECT * FROM register_user Where [UserName]=@username";
      
              using(OracleConnection conn = new OracleConnection(connstring))
             {
      
              using(OracleCommand cmd = new OracleCommand())
             {
              cmd.Connection = conn;
              cmd.Parameters.Add("@username", username);//add parameters before assigning it to CommandText
              cmd.CommandText = statementcmd;
      
              if (conn.State != ConnectionState.Open)
              {
                  conn.Open();
                 OracleDataReader reader = cmd.ExecuteReader();
      
      
                  if (!reader.Read())
                  { MessageBox.Show("User Name Not Found"); }
      
                  if (!password.Equals(reader["password"].ToString())) 
                  {
                       status=true;
                       MessageBox.Show("Incorrect Password");
      
                  }
      
      
              }
            }
      
           }
      
         }
          catch (Exception ex)
          {
              MessageBox.Show(ex.ToString());
              status=false;
          }
      
      return status;
      
      }
      

      【讨论】:

      • @xXghostXx :我认为 UserName 是 Oracle 中的保留字,用方括号括起来 [] 查看我编辑的答案...
      • 我尝试将整个列名更改为“uname”,并将参数名称更改为 un,但仍然发生相同的错误
      猜你喜欢
      • 2013-08-31
      • 1970-01-01
      • 2021-12-15
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 2023-03-27
      相关资源
      最近更新 更多