在asp.net c中使用多个sqldatareader时出错 [英] error on using multiple sqldatareader in asp.net c#

查看:106
本文介绍了在asp.net c中使用多个sqldatareader时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用多个datareader从多个表中检索数据。我有错误..

读取器关闭时调用CheckDataIsReady无效。



我的代码是



while using multiple datareader for retriving data from more than one table. i''ve got error..
invalid attempt to call CheckDataIsReady when reader is closed.

my code is

SqlConnection sc = new SqlConnection(@"DataSource=.\SQLEXPRESS;AttachDbFilename=C:\Users\Dell\Documents\Visual Studio 2010\Projects\fc 23-3\fc\App_Data\fc.mdf;Integrated Security=True;User Instance=True");

                    sc.Open();

 string cmdstr = "SELECT fnm,lnm,live,DATENAME(month, dob) AS month, YEAR(dob) AS year, DAY(dob) AS Expr1, DATEDIFF(yy, dob, GETDATE()) AS age,email,phn FROM register where unm='" + user + "'";
                    string cmdstr1 = "SELECT gender,college, university, city,state,yjoin,yleave,ybatch,abtme FROM profile where unm='" + user + "'";
                    string cmdstr2 = "SELECT photo FROM profile where unm='" + user + "'";
                    SqlCommand cmd = new SqlCommand(cmdstr, sc);
                    SqlCommand cmd1 = new SqlCommand(cmdstr1, sc);
                   
                    SqlDataReader rd = cmd.ExecuteReader();
                    if (rd.Read())
                    {
                       
                        unm_lbl.Text = rd.GetString(0) + "  " + rd.GetString(1);
                        frm_lbl.Text = rd.GetString(7);
                       
                      
                        bdt_lbl.Text = rd[11] + " " + rd[13];
                        age_lbl.Text = rd[14].ToString();
                        eml_lbl.Text = rd.GetString(15);
                       
                      
                    }
                   
                    rd.Close();
                    SqlDataReader rd1 = cmd1.ExecuteReader();

                    if (rd1.Read())
                    {
                        clg_lbl.Text = "College " + " " + rd.GetString(2);
                        uni_lbl.Text = "University  " + rd.GetString(8);
                       abt_lbl.Text = "About me:" + " " + rd1.GetString(4);
                       crnt_lbl.Text = rd.GetString(4);
                       btch_lbl.Text = "Batch  " + rd.GetString(9) + " - " + rd.GetString(10);
                    }
                    
                    rd1.Close();
                   
                    sc.Close();

推荐答案

看看你的代码:

Look at your code:
rd.Close();
 SqlDataReader rd1 = cmd1.ExecuteReader();

 if (rd1.Read())
 {
     clg_lbl.Text = "College " + " " + rd.GetString(2);
     uni_lbl.Text = "University  " + rd.GetString(8);
    abt_lbl.Text = "About me:" + " " + rd1.GetString(4);
    crnt_lbl.Text = rd.GetString(4);
    btch_lbl.Text = "Batch  " + rd.GetString(9) + " - " + rd.GetString(10);
 }

因为你关闭了 rd 我怀疑你想要使用 rd1 而不是...



这是使用块真正有用的情况之一:

Since you have closed rd I suspect you wanted to use rd1 instead...

This is one of the cases where a using block really helps:

using (SqlDataReader rd = cmd.ExecuteReader())
{
    if (rd.Read())
    {

        unm_lbl.Text = rd.GetString(0) + "  " + rd.GetString(1);
        frm_lbl.Text = rd.GetString(7);


        bdt_lbl.Text = rd[11] + " " + rd[13];
        age_lbl.Text = rd[14].ToString();
        eml_lbl.Text = rd.GetString(15);
    }
}

意味着 rd 在使用结束时超出范围,编译器会发出错误信息。

Means that rd goes out of scope at the end of it''s use, and the compiler would have issued an error message.


你用rd.Close()关闭了DataReader;只需将其打开直到结束,并在关闭rd1时将其关闭。您正试图从if(rd1.Read())语句下的rd读取以获得College。
You closed the DataReader with rd.Close(); Just leave it open until the end and close it when you close rd1. You are trying to read from rd under the if (rd1.Read()) statement to get College.


这篇关于在asp.net c中使用多个sqldatareader时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆