我有这样的代码:
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;
}
}
}我该怎么引用这个?
我试过了,但没有用。
SqlDataReader reader = GeneralFunctions.GetGeneralInformation();另外,我如何从读者那里读到?
Reader.GetString( reader.GetOrdinal( "Status" ) )编辑
我现在收到以下错误:
异常详细信息: System.NullReferenceException:对象引用未设置为对象实例。
以下是更新的代码:
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();
}发布于 2012-04-20 19:45:54
问题是保留函数(通过返回语句)将您踢出using块,因此您使用的SqlDataReader和SqlConnections将被释放。要解决这个问题,请尝试像下面这样更改函数签名:
public static IEnumerable<IDataRecord> GetGeneralInformation ( int RecID )然后更新函数的中间,如下所示:
using ( var reader = cmd.ExecuteReader() )
{
while ( reader.Read() )
{
yield return reader;
}
}最后的“我该怎么读?”部分原因可能是这样的:
int RecID = 12345;
string result = GetGeneralInformation(RecID).First()["Status"].ToString();发布于 2014-02-22 00:19:18
将连接字符串添加到AppSettings节中的app.config或web.config中。
public string GetSqlConnection()
{
return System.Configuration.ConfigurationManager.AppSettings["SqlConnectionString"];
}返回SqlDataReader结果的//函数
public SqlDataReader executeReader(string sql, SqlParameter[] parameters=null)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = GetSqlConnection();
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
if (parameters != null)
{
cmd.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter p in parameters)
{
cmd.Parameters.Add(p);
}
}
else
{
cmd.CommandType = CommandType.Text;
}
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return reader;
}要使用该功能:
string query = @"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";
//you can add more parameters by adding commas
var parameters = new SqlParameter[] {
new SqlParameter("@value", RecID )
};
SqlDataReader dr = executeReader(query, parameters);
while (dr.Read())
{
//fill your controls with data
}
dr.Close();发布于 2016-10-09 11:23:58
我认为this StackOverflow answer值得一提。一种非常简单且易于使用的解决方案。
https://stackoverflow.com/questions/10252531
复制相似问题