Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查我的数据库中是否存在用户_C#_Database_Oracle11g - Fatal编程技术网

C# 检查我的数据库中是否存在用户

C# 检查我的数据库中是否存在用户,c#,database,oracle11g,C#,Database,Oracle11g,我有一个c#登录论坛,有两个文本框 1.用户名 2.密码 我正在尝试检查用户是否存在于我的Oracle数据库中。如果是这样,我希望它做一些事情(比如给另一个论坛打电话等等),但是我收到一条错误消息,上面说我缺少一个表达式。怎么了 private void button1_Click(object sender, EventArgs e) { isUserExist(textBox1.Text,textBox2.Text); } public bool isUserExist(strin

我有一个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;
    }

}

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

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

祝你好运

1.在将commandstring分配给
CommandText
之前,您需要分配
参数
2.在访问
记录之前,需要调用
Read()
对象
reader

3.只有在找到用户时,才应在
true
时返回true。(如果缺少开放大括号,则在第二种情况下返回)。
4.您可以对程序中所有
IDisposable
实现的类使用
using{}
block,这样它们的对象
dispose
就会得到处理。(因此,您不需要调用
Connection
Command
对象上的
Close()

完整解决方案:

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,但仍然发生了相同的错误