C# 读卡器关闭时调用元数据的尝试无效?
我正在运行datareader的if-else语句来查询表数据并激活/取消激活页面上的一些控件。我实现了一个using语句,在我关闭块时自动关闭连接和读卡器,但是我仍然在我的if-else语句中得到了读卡器已关闭的错误。少了什么?代码如下:C# 读卡器关闭时调用元数据的尝试无效?,c#,asp.net,sql-server,visual-studio,datareader,C#,Asp.net,Sql Server,Visual Studio,Datareader,我正在运行datareader的if-else语句来查询表数据并激活/取消激活页面上的一些控件。我实现了一个using语句,在我关闭块时自动关闭连接和读卡器,但是我仍然在我的if-else语句中得到了读卡器已关闭的错误。少了什么?代码如下: string comnt = "SELECT StatusId FROM Submission WHERE SubmissionId =" + x; using (SqlConnection editConn = new SqlConnectio
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;
}
}
试着这样做:
if (dr.HasRows)
{
while (dr.Read())
{
if (dr.GetInt32(0) > 0)
{
...
}
}
}
有关详细信息,请查看此页面:
您的查询没有返回任何结果。如果不确定查询是否将返回任何数据,请习惯以下构造:
while (dr.Read()) //will return true while there is data to be read.
{
...
}
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;
}
}
由于读卡器名称不匹配,我面临这个问题。i、 e
SqlCommand sqlmd = new SqlCommand();
SqlDataReader sqldr = sqlmd.ExecuteReader();
while (sqldr.Read())
{
idd = (int)rdr["Id"];
}
后来我替换了代码
idd = (int)sqldr["Id"];
解决了这个错误
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")
说未找到元数据。后来我发现读卡器没有关闭,但是ASP.NET程序使用了太多内存,自动关闭了读卡器。这主要取决于SQL server阶段。如果是常规错误,请检查您的连接。您确定读卡器返回行吗?在读取“x”代表什么之前,它要检查“HasRows”属性?它是代表字符串的字符串吗?一个号码?您应该习惯使用参数,连接字符串来构建SQL查询是危险的,特别是当“x”依赖于用户时。被查询的字段不接受空值,因此它肯定会返回@vityanya行,@InBetween,@x'是用于在页面上存储jQuery提交id的字符串。可能重复-谢谢,@InBetween。我不确定为什么查询无法返回结果,因为字段为非null,并且对db表的检查显示数据在那里。@brazos:如果提交id不是数字,则查询字符串中可能缺少“”。如果是数字,请检查是否存在任何本地化问题。无论是否为空,此构造都不会阻止错误。在调试模式下,我甚至在执行
SELECT*FROM Authors
类查询时也遇到过这种情况。HasRows
足以清除我的错误-不需要第二个if
。对我来说,尽管我期望有一个GUID,但当我执行dr.GetGuid(0)>0
时,它抛出了一个错误,因为它在DB中被保存为char(35)列,而不是uniqueidentifier列——在该实例中,如果测试失败,它将永远不会通过。所以,让买家注意这一点,虽然我承认我有一个特殊的情况。。。