您好:于C# + MSSQL 中

主PORC|-- 判断是否要做 次PROC ( 里面有seldct 语法)|--主PROC 最后有select 语法

因为会有次PORC 的执行可能性,所以会有多个datareader故会去判断这一个datareader是否为需要的有需要,在填入datatable中但是以下程式码,若没加break 跳出,就会遇到使用DataReader 会当读取器关闭时尝试呼叫 Read 无效。请问,这有何种方式可以解决 table使用reader的问题

while (dr.HasRows)
{
Console.WriteLine("\\t{0}", dr.GetName(0));

if (dr.GetName(0) == "doz") {
table1.Load(dr);
break;
}

dr.NextResult();
}

1 个回答

0

sam0407

iT邦大师 1 级 ‧ 2024-12-24 09:38:29

最佳解答

主、次PORC分别用两个DataReader来作就好了....

while (dr1.HasRows)
            {
                Console.WriteLine("\\t{0}", dr1.GetName(0));

                if (dr1.GetName(0) == "doz") {
                    table1.Load(dr2);
                    break;
                }            

                dr1.NextResult();
            }


  • 5

看更多先前的...收起先前的...

noway

iT邦研究生 1 级 ‧
2024-12-26 20:16:04

您好:
谢谢
所以 会需要用break; ?

修改

sam0407

iT邦大师 1 级 ‧
2024-12-27 09:10:04

这要看您程式的逻辑呀,我并不清楚您的需求...

改成用两个DataReader只是要解决用了table1.Load(dr)指令后,再执行dr.NextResult()会因为DataReader被关闭而出错的问题

修改

noway

iT邦研究生 1 级 ‧
2024-12-27 18:30:10

您好:
我只是好奇,为何 原程式,有brak,就不会有问题
table1.Load(dr); 后,仍会咬住 dr 吗?

一个proc 的结果
要如何分为 dr1 与 dr2

修改

sam0407

iT邦大师 1 级 ‧
2024-12-30 09:26:43

建议您先把.Net的基础读扎实,再来看或改别人的程式。

break就跳出while迴圈了,不会执行到dr.NextResult();,自然也不会有错误。

执行table1.Load(dr);后,不是会咬住dr,您看错误讯息就可以知道是因为dr被关闭。如果您了解DataTable.Load这方法作了什么事,就不会觉得意外。

修改

noway

iT邦研究生 1 级 ‧
2024-12-30 19:38:39

谢谢您的指导

修改