OleDb循环中的多个连接

时间:2014-11-25 14:52:29

标签: c# oledb

我尝试与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无效。

Ligne 74:if(!reader.HasRows)

Ligne 75:{

Ligne 76:while(!reader.HasRows) ERROR

Ligne 77:{

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

3 个答案:

答案 0 :(得分:0)

reader = reader2;

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

答案 1 :(得分:0)

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

reader.Close();
reader = reader2;

而不是

reader = reader2;
reader2.Close();

虽然完全诚实,整个while循环似乎没有任何用处,因为你不使用从sql查询中检索的任何数据。

答案 2 :(得分:0)

首先,参数化,参数化!不要让您的疑问开放注射。此外,尝试理解并实践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";
        }
    }
}