winforms 我想从两个不同的类调用一个方法,但我不知道如何

a8jjtwal  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(113)

我目前正在尝试将数据库中的一个整数返回到一个变量中,以便与另一个整数进行比较,但我不断收到错误,例如连接未打开。我试过将数据库连接到其他类,无效。它一直在告诉我:
System.InvalidOperationException:'ExecuteReader:连接属性尚未初始化。'

class Database
{
    //connection
    public SqlConnection sqlConnection = null;
    public Database()
    {
        sqlConnection = new SqlConnection(connectionString);
        sqlConnection.Open();
    }

    public SqlCommand CreateCommand()
    {
        return sqlConnection.CreateCommand();
    }

    public int compare()
    {
        SqlCommand cmd = new SqlCommand();
        SqlDataReader dr = cmd.ExecuteReader();
        dr.Read();
        int ID = dr.GetInt32(0);
        return ID;
    }

    public void ExecuteSql(string sql)
    {
        var cmd = CreateCommand();
        cmd.CommandText = sql;

        cmd.ExecuteNonQuery();
    }
}

public partial class FmLogin : Form
{
        Database database = new Database();
        public FmLogin()
    {
        InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        int holder = database.compare();
        if (holder > 0)
        {
            MessageBox.Show($"2",
            "Thank you for making an account!", MessageBoxButtons.OK);
        }
    }
}
6tdlim6h

6tdlim6h1#

您没有使用compare()方法中的CreateCommand()方法。
我建议你在Compare()方法中这样做:

public int Compare()
{
    int ID;
    SqlCommand cmd = CreateCommand();        
    cmd.CommandText = "SELECT Id FROM mytable" // adapt your statement here
    using(SqlDataReader dr = cmd.ExecuteReader())
    {
        dr.Read();
        ID = dr.GetInt32(0);
    }
    return ID;
}

我还把一个使用周围的SqlDataReader处理后,它不再需要。否则,您无法将该连接用于其他命令

相关问题