Returning a SqlDataReader(返回 SqlDataReader)
问题描述
我有这个代码:
public static SqlDataReader GetGeneralInformation ( int RecID )
{
using ( var conn = new SqlConnection( GetConnectionString() ) )
using ( var cmd = conn.CreateCommand() )
{
conn.Open();
cmd.CommandText =
@"SELECT cs.Status, cs.Completed
FROM NC_Steps s
INNER JOIN NC_ClientSteps cs
ON cs.RecID = s.RecID
WHERE cs.ClientID = 162
AND s.RecID = @value";
cmd.Parameters.AddWithValue( "@value", RecID );
using ( var reader = cmd.ExecuteReader() )
{
if ( reader.Read() )
{
return reader;
}
return null;
}
}
}
如何引用这个?
我试过了,但它不起作用.
I tried this but it does not work.
SqlDataReader reader = GeneralFunctions.GetGeneralInformation();
另外我将如何从读者那里阅读?
Also how would I read from the reader?
Reader.GetString( reader.GetOrdinal( "Status" ) )
编辑:
我现在收到以下错误:
异常详细信息:System.NullReferenceException:没有对象引用设置为对象的实例.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
这是更新后的代码:
public static IEnumerable<IDataRecord> GetGeneralInformation ( int ClientID )
{
using ( var conn = new SqlConnection( GetConnectionString() ) )
using ( var cmd = conn.CreateCommand() )
{
conn.Open();
cmd.CommandText =
@"SELECT i.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.Email
FROM NC_Information i
INNER JOIN Distributor d
ON d.DistID = i.ClientID
WHERE clientID = @value";
cmd.Parameters.AddWithValue( "@value", ClientID );
using ( var reader = cmd.ExecuteReader() )
{
while ( reader.Read() )
{
yield return reader;
}
yield return null;
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
IEnumerable<IDataRecord> reader = GeneralFunctions.GetGeneralInformation( (int)Session[ "DistID" ] );
//string result = GeneralFunctions.GetGeneralInformation( Globals.GeneralInformation ).First()[ "Status" ].ToString();
}
推荐答案
问题是离开函数(通过 return 语句)把你踢出 using
块,所以 SqlDataReader
和 SqlConnections
已被释放.要解决此问题,请尝试更改函数签名,如下所示:
The problem is that leaving the function (via the return statement) kicks you out of the using
blocks, and so the SqlDataReader
and SqlConnections
you are using are disposed. To get around the problem, try changing the function signature like this:
public static IEnumerable<IDataRecord> GetGeneralInformation ( int RecID )
然后像这样更新函数的中间:
and then update the middle of the function like this:
using ( var reader = cmd.ExecuteReader() )
{
while ( reader.Read() )
{
yield return reader;
}
}
对于最后的我如何阅读它?"部分,它可能看起来像这样:
For the final "How do I read from it?" part, it might look like this:
int RecID = 12345;
string result = GetGeneralInformation(RecID).First()["Status"].ToString();
这篇关于返回 SqlDataReader的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:返回 SqlDataReader


- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 输入按键事件处理程序 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01