C# 使用SqlConnection打开DataReader错误
在我的项目中,我有一个从Sql2005服务器检索数据的函数 像这样,C# 使用SqlConnection打开DataReader错误,c#,.net,sql,sql-server,sql-server-2005,C#,.net,Sql,Sql Server,Sql Server 2005,在我的项目中,我有一个从Sql2005服务器检索数据的函数 像这样, SqlConnection sqlCnn = new SqlConnection(""); SqlCommand sqlCmd = new SqlCommand("Select user_id from users"); SqlDataReader sqlReader = null; sqlCnn.Open(); sqlCmd.Connection = sqlCnn; sqlReader = sqlCmd.ExecuteRe
SqlConnection sqlCnn = new SqlConnection("");
SqlCommand sqlCmd = new SqlCommand("Select user_id from users");
SqlDataReader sqlReader = null;
sqlCnn.Open();
sqlCmd.Connection = sqlCnn;
sqlReader = sqlCmd.ExecuteReader();
if (sqlReader.HasRows)
{
while (sqlReader.Read())
{
if(user_id == 1)
{
SqlCommand sqlCmd2 = new SqlCommand("Select mobile from tbl");
sqlCmd2.Connection = sqlCnn;
sqlCmd2.ExecuteReader();
}
}
}
我在执行sqlcmd2时遇到以下错误
已经有一个开放的DataReader
与此命令关联,该命令
必须先关闭
我不想在那里创建新的sqlconnection。有办法解决吗
此问题?要为每个连接打开两个读卡器,需要启用MARS(多个活动结果集)。 您可以通过连接字符串执行此操作:
Server=myServerAddress;Database=myDataBase;Trusted_Connection=True; MultipleActiveResultSets=true;
但是,不建议采用这种方法。我相信您可以通过一次查询检索到所需的数据 如果需要,您需要解释您需要检索的内容,并对单个查询提供建议。
我假设您显示的代码只是一个示例,而不是一个真实的示例,因为它没有多大意义
查看“MARS是否都是好消息,还是有任何负面影响?”部分如果您不能创建第二个SQL连接,则可以启用(多个活动结果集)
为什么不需要第二个连接?解决此问题的最佳方法是在数据库中将两个表连接在一起。这至少会使性能提高一个数量级,特别是在适当的列上有索引的情况下 数据结构不参与其中;这完全取决于你对结果的排序以及你如何阅读它们。如果操作正确,您可以将其读入任何可以想象的数据结构中 但如果这不是一个选项,请确保至少使用Sql Server 2005,并将
MultipleActiveResultSets=true
添加到连接字符串中
而且,当您这样做时,您现有的代码被破坏,最终可能导致数据库不可用,因为在发生异常的情况下,您不能保证关闭连接。要解决此问题,请使用块在
内创建SqlConnection对象。在.NET4中,不需要检查hasrows条件。Reader.Read()方法根据表内容返回true/false。刚和空桌子核对过。成功了 由于数据结构的原因,我们无法通过单个查询检索所有数据。这就是为什么我们必须使用另一个命令的原因,使用该命令有问题吗?谢谢,您可以在这里了解缺点:什么样的数据结构会使您无法一次性执行?你想还什么?用户表和tbl之间的关系是什么?为什么要检查用户_id==1?一次完成的任务越多,开销就越小。这只是示例代码,我们必须在执行第一个命令后进行检查和计算,然后根据该结果执行另一个命令。谢谢