我有一个c#登录论坛,有两个文本框
1.username
2.password
我正在尝试检查用户是否存在于我的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;
}
}
答案 0 :(得分:1)
在尝试访问属性之前,需要在DataReader上调用Read方法。
if (reader.Read())
{
// Do stuff
}
祝你好运!
答案 1 :(得分:0)
1。在将命令字符串分配给parameters
之前,您需要指定CommandText
。
2。在访问Read()
之前,您需要致电OracleDataReader
reader
对象records
。
3。只有在找到用户时才会在true
时返回true。(如果缺少条件打开花括号,则返回第二位。)
4。您可以对程序中的所有using{}
已实施的类使用IDisposable
块,以便对其对象disposal
进行处理。(所以你不要需要在Close()
或Connection
个对象上致电Command
完整解决方案:
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;
}