Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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# winform程序无法从sql读取数据_C#_Sql Server_Winforms - Fatal编程技术网

C# winform程序无法从sql读取数据

C# winform程序无法从sql读取数据,c#,sql-server,winforms,C#,Sql Server,Winforms,我有一个sql表,它是这样创建的 create table users (username varchar(20) not null, pass varchar(30) null, phoneNum char(8) null, email varchar(50) null, name varchar(50) null, membership varchar(3) null, rating char(1) null, primary key(username)) 我还有一个winform程序,试

我有一个sql表,它是这样创建的

create table users
(username varchar(20) not null,
pass varchar(30) null,
phoneNum char(8) null,
email varchar(50) null,
name varchar(50) null,
membership varchar(3) null,
rating char(1) null,
primary key(username))
我还有一个winform程序,试图从中读取数据。我目前有:

public DataTable loadUserData()
    {
        using (SqlConnection conn = new SqlConnection())
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                using (SqlDataAdapter dataAdapter = new SqlDataAdapter())
                {
                    try
                    {
                        //Define connection object
                        conn.ConnectionString = CONNECTION_STRING;

                        //Define command object
                        cmd.CommandText = "Select * from users";
                        cmd.Connection = conn;

                        //Define data adapter object
                        dataAdapter.SelectCommand = cmd;

                        //Open connection
                        conn.Open();

                        //Execute command
                        userDataTable.Clear();
                        dataAdapter.Fill(userDataTable);
                    }//try
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                    finally
                    {
                        conn.Close();
                    }
                }
            }//using sql command
        }//using sql connection
        return userDataTable;
    }
这可以加载数据(我想)。然后在我需要使用数据的另一种形式中,我有如下内容:

 DataTable dt = db.loadUserData();
 foreach(DataRow dr in dt.Rows)
 {
     else if (txtPassword.Text == dr["pass"].ToString())
                {
                    //code to login
                }
 }
但我总是犯这样的错误

只有在正确键入密码时,才会发生此错误。我在这里做错了什么,或者为什么它不起作用

这是我完整的foreach循环:

Database db = new Database(); //Database is the class where loadUserdata is found
int count = 0;
        DataTable udt = db.loadUserData();
        DataTable rdt = db.loadRoomsData();
        foreach(DataRow udr in udt.Rows)
        {
            if (txtUsername.TextLength == 0)
            {
                lblVerify.Visible = true;
                lblVerify.Text = "Please enter a username";
                txtUsername.Focus();
                break;
            }
            else if (txtUsername.Text.ToLower() == udr["username"].ToString())
            {
                if (txtPassword.TextLength == 0)
                {
                    lblVerify.Visible = true;
                    lblVerify.Text = "Please enter the password";
                    txtPassword.Focus();
                    break;
                }
                else if (txtUsername.Text.ToLower() == "admin" && txtPassword.Text == "admin")
                {
                    Administrator admin = new Administrator();
                    admin.Show();
                    this.Hide();
                    break;
                }
                else if (txtPassword.Text == udr["pass"].ToString() && checkBooking() == true)
                {
                    Receipt rcpt = new Receipt(udr["username"].ToString(), backColor);
                    rcpt.Show();
                    this.Hide();
                    break;
                }
                else if (checkFull() == true)
                {
                    lblVerify.Visible = true;
                    lblVerify.Text = "All our hotels are currently fully booked. Sorry for the incovenience caused";
                    break;
                }
                else if (txtPassword.Text == udr["pass"].ToString())
                {
                    Main hotel = new Main(txtUsername.Text, backColor);
                    hotel.Show();
                    this.Hide();
                    break;
                }
                else
                {
                    lblVerify.Visible = true;
                    lblVerify.Text = "Password does not match Username. Please try again";
                    txtPassword.Focus();
                    txtPassword.SelectAll();
                    break;
                }
            }
            else if(udr["username"].ToString() != txtUsername.Text)
            {
                count++;
            }
        }
我调试了程序,出现错误的那一行就是

`else if (txtPassword.Text == dr["pass"].ToString())'

好的,对不起,伙计们,我发现了错误。我的checkBooking()函数有一个问题,我想我知道如何解决它。谢谢大家。

我的老师让我这么做,使用不是这里的问题。不确定为什么方法中没有声明
userDataTable
,但我猜这与此有关。您可以共享foreach循环的完整代码吗?您可以使用debug point并查看得到错误的行。共享这一行将更容易帮助您。使用您创建的每个IDisposable实例包装a
,这是一个很好的做法。现在您可以摆脱使用的
try/catch/finally
,因为它唯一的价值是确保
conn
正确关闭,这将是任何方式,因为您正在使用