OleDb 循环中的多个连接

本文关键字:连接 循环 OleDb | 更新日期: 2023-09-27 18:31:59

我尝试与 Oledb 建立多重连接,以便在我的 SQL 请求中减少我的变量。

这是我的代码:

protected void Page_Load(object sender, EventArgs e)
{
    int var = 0;
    string conn = " ... ";
    OleDbConnection connexion = new OleDbConnection(conn);
    connexion.Open();
    OleDbCommand cmd = new OleDbCommand("SELECT ID, DATA_1, DATA_2 from Database WHERE ID = ( SELECT MAX (ID) -" + var + " FROM Database);", connexion);
    OleDbDataReader reader = cmd.ExecuteReader();
    reader.Read();
            if (!reader.HasRows)
            {
                while (!reader.HasRows)
                {
                    OleDbConnection connexion2 = new OleDbConnection(conn);
                    connexion2.Open();
                    var++;
                    OleDbCommand cmd2 = new OleDbCommand(""SELECT ID, DATA_1, DATA_2 from Database WHERE ID = ( SELECT MAX (ID) -" + var + " FROM Database);", connexion2);
                    OleDbDataReader reader2 = cmd2.ExecuteReader();
                    reader2.Read();

                    reader = reader2;
                    reader2.Close();
                    connexion2.Close();
                }
            }
            else
            {
                Label5.Text = "Line Empty";
            }

        }


    reader.Close();
    connexion.Close();

}

我有一个错误 第 76 行:

尝试调用 HasRows 无效,当驱动程序关闭时。

利涅 74 : 如果 (!reader.哈斯罗斯)

法力 75 : {

利涅 76 : 而 (!HasRows) 错误

法力 77 : {

Ligne 78 : OleDbConnection connexion2 = new OleDbConnection(conn);

OleDb 循环中的多个连接

reader = reader2;

由于该行,reader现在在下一个循环迭代中关闭。

您将reader设置为reader2然后关闭reader2,这意味着reader引用的对象已关闭。 因此,当循环再次启动时while (!reader.HasRows)将引发异常,因为reader已关闭。 您可能希望关闭reader然后将reader2设置为 reader

reader.Close();
reader = reader2;

而不是

reader = reader2;
reader2.Close();

尽管说实话,整个while循环在这里似乎没有任何用途,因为您不使用从SQL查询中检索的任何数据。

首先,参数化,参数化!不要让您的查询开放进行注入。此外,尝试理解并练习使用 using 语句,以防止随机资源被锁定。试试这段代码,看看事情是如何为你工作的。不确定这是否是您要做的,因为您的代码非常不清楚,您对尝试执行的操作的描述也是如此。希望这有帮助,如果没有,请尝试坚定您对需要完成的工作的解释。

string conn = " ... ";
using (OleDbConnection connexion = new OleDbConnection(conn))
using (OleDbCommand cmd = new OleDbCommand("SELECT ID, DATA_1, DATA_2 from Database WHERE ID = ( SELECT MAX (ID) FROM Database WHERE DATA_1 IS NOT NULL AND DATA_2 IS NOT NULL);", connexion))
{
    connexion.Open();
    using (OleDbDataReader reader = cmd.ExecuteReader())
    {
        if (reader.HasRows)
        {
            while (reader.Read())
            {
                Label5.Text  = reader["DATA_1"].ToString();
            }
        }
        else
        {
            Label5.Text = "Line Empty";
        }
    }
}