当前位置: 首页 > 编程语言 > C#

ReturnSqlDataReader分享

时间:2023-04-10 23:54:19 C#

ReturnSqlDataReader我有这样的代码:{conn.Open();cmd.CommandText=@"SELECTcs.Status,cs.CompletedFROMNC_StepssINNERJOINNC_ClientStepscsONcs.RecID=s.RecIDWHEREcs.ClientID=162ANDs.RecID=@value";cmd.Parameters.AddWithValue("@value",RecID);使用(varreader=cmd.ExecuteReader()){if(reader.Read()){returnreader;}返回空值;}}}如何参考?我试过了,但没用。SqlDataReaderreader=GeneralFunctions.GetGeneralInformation();另外我如何阅读读者?Reader.GetString(reader.GetOrdinal("Status"))编辑:我现在收到以下错误:异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。这是更新的代码:cmd.CommandText=@"SELECTi.GoLiveDate,i.FirstBonusRun,i.TechFName,i.TechLName,i.TechEmail,i.TechPhone,i.WebISPFName,i.WebISPLName,i.WebISPEmail,i.WebISPPhone,i.FullFillFName,i.FullFillLName,i.FullFillEmail,i.FullFillPhone,d.FName,d.LName,d.HomePhone,d.EmailFROMNC_InformationiINNERJOINDistributordONd.DistID=i.ClientIDWHEREclientID=@value";cmd.Parameters.AddWithValue("@value",ClientID);使用(varreader=cmd.ExecuteReader()){while(reader.Read()){yieldreturnreader;}yieldreturnnull;}}}protectedvoidPage_Load(objectsender,EventArgse){IEnumerablereader=GeneralFunctions.GetGeneralInformation((int)Session["DistID"]);//字符串结果=GeneralFunctions.GetGeneralInformation(Globals.GeneralInformation).First()["Status"].ToString();问题是离开函数(通过return语句)将您踢出using块,因此您使用的SqlDataReader和SqlConnections被释放。要解决此问题,请尝试将函数签名更改为如下所示:publicstaticIEnumerableGetGeneralInformation(intRecID)然后像这样更新函数的中间部分:using(varreader=cmd.ExecuteReader()){while(reader.Read()){yieldreturnreader;对于“我如何读取它?”最后一部分,它可能看起来像这样:stringresult=reader.First()["Status"].ToString();将连接字符串添加到.config中的app.config或webAppSettings部分。公共字符串GetSqlConnection(){返回System.Configuration.ConfigurationManager.AppSettings["SqlConnectionString"];}//返回SqlDataReader结果的函数publicSqlDataReaderexecuteReader(stringsql,SqlParameter[]parameters=null){SqlConnectionconn=newSqlConnection();conn.ConnectionString=GetSqlConnection();conn.Open();SqlCommandcmd=newSqlCommand();cmd.Connection=conn;cmd.CommandText=sql;如果(参数!=null){cmd.CommandType=CommandType.StoredProcedure;foreach(SqlParameterpinparameters){cmd.Parameters.Add(p);}}else{cmd.CommandType=CommandType.Text;}SqlDataReaderreader=cmd.ExecuteReader(CommandBehavior.CloseConnection);返回读者;}要使用该函数:stringquery=@"SELECTcs.Status,cs.CompletedFROMNC_StepssINNERJOINNC_ClientStepscsONcs.RecID=s.RecIDWHEREcs.ClientID=162ANDs.RecID=@value";//你可以通过添加逗号来添加更多参数varparameters=newSqlParameter[]{newSqlParameter("@value",RecID)};SqlDataReaderdr=executeReader(query,parameters);while(dr.Read()){//用数据填充你的控件}dr.Close();我相信这个StackOverflow答案值得一提。问题是您在方法中创建了数据库连接。如果要在多个方法之间共享数据库资源,请将SqlConnection移出此范围。这样你就可以从这个函数返回Reader并且它会一直存在。另外,不要在此函数中使用.Read(),只需返回对象即可。根据定义,using语句应该在调用之后调用该对象。因此,在您返回数据读取器后,它将被处理掉。以上就是C#学习教程:返回SqlDataReader分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: