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);
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";
}
}
}