我在datareader上运行if else语句来查询表数据并激活/取消激活页面上的某些控件。当我关闭块时,我实现了一个using语句来自动关闭连接和读取器,但是我的每个if else语句仍然会让读者关闭错误。少了什么东西?代码如下:
string comnt = "SELECT StatusId FROM Submission WHERE SubmissionId =" + x;
using (SqlConnection editConn = new SqlConnection(connectionString))
{
editConn.Open();
using (SqlCommand statCmd = new SqlCommand(comnt, editConn))
{
SqlDataReader dr = statCmd.ExecuteReader();
dr.Read();
if (dr.GetInt32(0) > 0)
{
PanelComment.Visible = true;
PanelQuote.Visible = false;
LnbFid.Visible = false;
LnbCrim.Visible = false;
LnbEo.Visible = false;
LnbEpl.Visible = false;
LnbNot.Visible = false;
LnbPriv.Visible = false;
LnbPub.Visible = false;
}
else
{
PanelComment.Visible = false;
}
}
答案 0 :(得分:3)
尝试这种方式:
if (dr.HasRows)
{
while (dr.Read())
{
if (dr.GetInt32(0) > 0)
{
...
}
}
}
有关详情,请查看此页:
答案 1 :(得分:3)
您的查询未获得任何结果。如果您不确定您的查询是否会返回任何数据,请习惯以下构造:
while (dr.Read()) //will return true while there is data to be read.
{
...
}
答案 2 :(得分:1)
似乎select语句没有返回任何行 当你第一次调用dr.Read()时 datareader将立即关闭 对于使用数据阅读器,我们总是显示使用if或while 像莱尼尔所说的那样
using (SqlCommand statCmd = new SqlCommand(comnt, editConn))
{
SqlDataReader dr = statCmd.ExecuteReader();
if( dr.Read())
if (dr.GetInt32(0) > 0)
{
PanelComment.Visible = true;
PanelQuote.Visible = false;
LnbFid.Visible = false;
LnbCrim.Visible = false;
LnbEo.Visible = false;
LnbEpl.Visible = false;
LnbNot.Visible = false;
LnbPriv.Visible = false;
LnbPub.Visible = false;
}
else
{
PanelComment.Visible = false;
}
}
答案 3 :(得分:1)
由于读者姓名不匹配,我遇到了这个问题。即。
SqlCommand sqlmd = new SqlCommand();
SqlDataReader sqldr = sqlmd.ExecuteReader();
while (sqldr.Read())
{
idd = (int)rdr["Id"];
}
后来我更换了代码
idd = (int)sqldr["Id"];
并且错误已经解决。
答案 4 :(得分:-1)
if (conn.State == ConnectionState.Closed)
conn.Open();
SqlCommand qr1 = new SqlCommand("select TransID, FType, FldName, LTrans,
OnCCBeforeLoad, LTop, LLeft, LWidth, LHeight, LFColor
from jwOndropExecButtonS where active = 'T' and MyType = ''
and LTrans = '" + TmpRajTransID + "' order by dbo.val(TransID) ", conn);
SqlDataReader d1 = qr1.ExecuteReader();
while (d1.Read())
{
if (d1.HasRows)
{
string MrFldName = d1["FldName"].ToString().Trim();
if (d1["OnCCBeforeLoad"].ToString().Trim() == "Clr")
ClearValueandToolTipforFieldName(MrFldName);
if (d1["LTop"].ToString().Trim() != "")
DisplaySetTopValue(MrFldName, d1["LTop"].ToString().Trim());
if (d1["LLeft"].ToString().Trim() != "")
DisplaySetLeftValue(MrFldName, d1["LLeft"].ToString().Trim());
if (d1["LWidth"].ToString().Trim() != "")
DisplaySetWidthValue(MrFldName, d1["LWidth"].ToString().Trim());
if (d1["LHeight"].ToString().Trim() != "")
DisplaySetHeightValue(MrFldName, d1["LHeight"].ToString().Trim());
if (d1["FType"].ToString().Trim() == "Visible")
ShowTextBoxWithFldName(MrFldName);
if (d1["FType"].ToString().Trim() == "InVisible")
HideandClearTextBoxWithFldName(MrFldName);
if (d1["FType"].ToString().Trim() == "InNVisible")
HideOnlyTextBoxWithFldName(MrFldName);
if (d1["FType"].ToString().Trim() == "Enable")
SetEnableforFieldName(MrFldName);
if (d1["FType"].ToString().Trim() == "Disable")
SetDisableforFieldName(MrFldName);
}
}
d1.Close();
if (conn.State == ConnectionState.Open)
conn.Close();
我偶尔会遇到同样的错误
if (d1["FType"].ToString().Trim() == "Visible")
说metadata not found
。后来我发现读者没有关闭,但是使用太多内存的ASP.NET程序会自动关闭阅读器。它主要取决于SQL Server阶段。如果是常规错误,请检查您的连接。