C# 管理员和用户检查不起作用

C# 管理员和用户检查不起作用,c#,sql,.net,C#,Sql,.net,我有一个名为Logins的数据库表,它有3列:Username、Password和Category。类别有两种类型:Admin和User 我有一个带有两个文本框的表单,用户将在其中写入用户名和密码。使用用户名文本框输入,我想检查给定的用户名是管理员还是用户,并在此基础上打开不同的表单 我收到以下错误: 意外错误:“'” 您的查询不正确,它缺少一个和,并且有额外的,。应该是这样的 SELECT Count(*) FROM Logins WHERE Username=@uname and Passw

我有一个名为
Logins
的数据库表,它有3列:
Username
Password
Category
。类别有两种类型:
Admin
User

我有一个带有两个文本框的表单,用户将在其中写入用户名和密码。使用用户名文本框输入,我想检查给定的用户名是
管理员
还是
用户
,并在此基础上打开不同的表单

我收到以下错误:

意外错误:
“'”


您的查询不正确,它缺少一个
,并且有额外的
。应该是这样的

SELECT Count(*) FROM Logins
WHERE Username=@uname and
Password=@pass and Category=@ctgy

您的程序只检查用户是否存在。它不会将类别发回。所以您应该使用executereader。如果找到用户,将发送回详细信息。检查下面的代码

 SqlConnection con = new SqlConnection("Data Source=JAYI-PC\\SQLEXPRESS; 
    Initial Catalog=db-ub;Integrated Security=True");
    try
    {
        con.Open();
      string cat = null;
        SqlCommand cmd = new SqlCommand(@"SELECT Username,Password,Category
        FROM Logins WHERE Username=@uname and
        Password=@pass", con);

        cmd.Parameters.AddWithValue("@uname", textBox_usern.Text);
        cmd.Parameters.AddWithValue("@pass", textBox_pwd.Text);

        SqlDataReader rdr = cmd.ExecuteReader();  
        //int result = (int)cmd.ExecuteScalar();

       int result = 0;
       while(rdr.Read()
     {
       result++; //to confirm it entered while loop so data is there
       cat = rdr["Category"].ToString();

     }

        if (result > 0)
        {
            if (cat == "Admin")//this one will chek whether user is admin or
                                 user
            {
                MessageBox.Show("Welcome Admin");
                Admin f1 = new Admin();
                f1.Show();
            }

            else
            {
                MessageBox.Show("Welcome " + textBox_usern.Text);
                FormCheck f3 = new FormCheck();
                f3.Show();
            }
        }

        else
        {
            MessageBox.Show("Incorrect login");
        }
        textBox_usern.Clear();
        textBox_pwd.Clear();

我相信您正在尝试阅读分类,将您的查询更改为此

SqlCommand cmd = new SqlCommand(@"SELECT Category FROM Logins
                            WHERE Username=@uname and
                            Password=@pass", con);
cmd.Parameters.AddWithValue("@uname", textBox_usern.Text);
cmd.Parameters.AddWithValue("@pass", textBox_pwd.Text);

SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
var c = reader["Category"].ToString();
   if (c== "Admin")//this one will chek whether user is admin or user
    {
        MessageBox.Show("Welcome Admin");
        Admin f1 = new Admin();
        f1.Show();
    }

    else
    {
        MessageBox.Show("Welcome " + textBox_usern.Text);
        FormCheck f3 = new FormCheck();
        f3.Show();
    }
}
else
{
    MessageBox.Show("Incorrect login");
}
textBox_usern.Clear();
textBox_pwd.Clear();

谢谢,但我认为我在@ctgy的值上也做错了什么。如何检查它并获得正确的值。不能understand@JayitaRoy您在哪里定义
c
?我们不知道您如何检查用户是管理员还是用户。您是否以纯文本形式存储密码?请不要那样做。我是初学者。那我该怎么办?请help@JayitaRoy从这里,u r赋值C?删除
Category=@ctgy
cmd.Parameters.AddWithValue(@ctgy,C)。您没有根据
类别
进行选择,您需要通过
用户名
通行证
获取该类别。选择仅使用
用户名
通过
后,检查该行是否为
类别==“Admin”
“User”
无需oops忘记删除它欢迎,@JayitaRoy接受答案,如果它对您有帮助,感谢TestWell指出这是一个比接受的答案更简洁的答案。你接受了正确的答案吗?这只“猫”是从哪里来的?@jayitaroy在con.open()之后,我声明了一个字符串
string cat=null
@jayitaRoy将其重命名为其他东西..类别..或您需要的东西want@jayitaRoy这只是一个变量名,您可以使用任何有意义的名称。此代码显示“意外错误:索引超出了数组的边界”
SqlCommand cmd = new SqlCommand(@"SELECT Category FROM Logins
                            WHERE Username=@uname and
                            Password=@pass", con);
cmd.Parameters.AddWithValue("@uname", textBox_usern.Text);
cmd.Parameters.AddWithValue("@pass", textBox_pwd.Text);

SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
var c = reader["Category"].ToString();
   if (c== "Admin")//this one will chek whether user is admin or user
    {
        MessageBox.Show("Welcome Admin");
        Admin f1 = new Admin();
        f1.Show();
    }

    else
    {
        MessageBox.Show("Welcome " + textBox_usern.Text);
        FormCheck f3 = new FormCheck();
        f3.Show();
    }
}
else
{
    MessageBox.Show("Incorrect login");
}
textBox_usern.Clear();
textBox_pwd.Clear();