Sql 当读卡器关闭时调用Read的尝试无效。读卡器打开时出错
我有以下代码:Sql 当读卡器关闭时调用Read的尝试无效。读卡器打开时出错,sql,asp.net,Sql,Asp.net,我有以下代码: { c = Request.QueryString["city"]; SqlConnection objConn2 = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); SqlCommand objCmd2; SqlDataReader objRdr2; // String strCmd2; objConn2.Open();
{
c = Request.QueryString["city"];
SqlConnection objConn2 = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
SqlCommand objCmd2;
SqlDataReader objRdr2;
// String strCmd2;
objConn2.Open();
objCmd2 = new SqlCommand("SELECT * FROM subject_details WHERE Roll_no = " +"'" + c + "'", objConn2);
objRdr2 = objCmd2.ExecuteReader();
while (objRdr2.Read())
{
Label122.InnerText = (string)objRdr2["Name"].ToString().ToUpper();
objRdr2.Close();
objConn2.Close();
}
这段代码运行得很好,突然我发现了错误:
System.InvalidOperationException:在以下情况下调用读取的尝试无效
读卡器已关闭
谁能帮我解释一下为什么我会出现这个错误Close()
应该在之后,而循环如下
while (objRdr2.Read())
{
Label122.InnerText = (string)objRdr2["Name"].ToString().ToUpper();
}
objRdr2.Close();
objConn2.Close();
objRdr2.Read();
Label122.InnerText = (string)objRdr2["Name"].ToString().ToUpper();
objRdr2.Close();
objConn2.Close();
但是上面的代码设置为Label122.InnerText
查询的最后一个值。因此,您应该将TOP 1
添加到查询中
objCmd2 = new SqlCommand("SELECT TOP 1* FROM subject_details WHERE Roll_no = " +
"'" + c + "'", objConn2);
然后在Label122.InnerText
中,将是查询的第一个值。您还可以按如下所示删除而循环
while (objRdr2.Read())
{
Label122.InnerText = (string)objRdr2["Name"].ToString().ToUpper();
}
objRdr2.Close();
objConn2.Close();
objRdr2.Read();
Label122.InnerText = (string)objRdr2["Name"].ToString().ToUpper();
objRdr2.Close();
objConn2.Close();
然后在标签122中。InnerText也将是查询的第一个值。Close()
应位于之后,而循环如下
while (objRdr2.Read())
{
Label122.InnerText = (string)objRdr2["Name"].ToString().ToUpper();
}
objRdr2.Close();
objConn2.Close();
objRdr2.Read();
Label122.InnerText = (string)objRdr2["Name"].ToString().ToUpper();
objRdr2.Close();
objConn2.Close();
但是上面的代码设置为Label122.InnerText
查询的最后一个值。因此,您应该将TOP 1
添加到查询中
objCmd2 = new SqlCommand("SELECT TOP 1* FROM subject_details WHERE Roll_no = " +
"'" + c + "'", objConn2);
然后在Label122.InnerText
中,将是查询的第一个值。您还可以按如下所示删除而循环
while (objRdr2.Read())
{
Label122.InnerText = (string)objRdr2["Name"].ToString().ToUpper();
}
objRdr2.Close();
objConn2.Close();
objRdr2.Read();
Label122.InnerText = (string)objRdr2["Name"].ToString().ToUpper();
objRdr2.Close();
objConn2.Close();
然后在Label122中。InnerText也将是查询中的第一个值。您应该删除objRdr2.Close()代码>来自while循环
它应该在while循环之后
如下
while (objRdr2.Read())
{
Label122.InnerText = (string)objRdr2["Name"].ToString().ToUpper();
objConn2.Close();
}
objRdr2.Close();
如果在下一个循环中循环时在内部关闭它,则指定的错误将抛出您应该删除objRdr2.close()代码>来自while循环
它应该在while循环之后
如下
while (objRdr2.Read())
{
Label122.InnerText = (string)objRdr2["Name"].ToString().ToUpper();
objConn2.Close();
}
objRdr2.Close();
如果在下一个循环中循环时在内部关闭它,则指定的错误将抛出,请使用sql参数传递该城市。如果恰好包含”
(sql注入),您的代码将失败(或更糟),请使用sql参数传递该城市。如果恰好包含”
(sql注入),您的代码将失败(或更糟)