我有这个代码:
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我该如何参考?
我试过这个,但它不起作用.
SqlDataReader reader = GeneralFunctions.GetGeneralInformation();
Run Code Online (Sandbox Code Playgroud)
另外我怎么读读者?
Reader.GetString( reader.GetOrdinal( "Status" ) )
Run Code Online (Sandbox Code Playgroud)
编辑:
我现在收到以下错误:
异常详细信息: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();
}
Run Code Online (Sandbox Code Playgroud)
Joe*_*orn 17
问题是,离开功能(通过return语句)踢你出的using块,所以SqlDataReader和SqlConnections你使用的配置.要解决此问题,请尝试更改功能签名,如下所示:
public static IEnumerable<IDataRecord> GetGeneralInformation ( int RecID )
Run Code Online (Sandbox Code Playgroud)
然后像这样更新函数的中间:
using ( var reader = cmd.ExecuteReader() )
{
while ( reader.Read() )
{
yield return reader;
}
}
Run Code Online (Sandbox Code Playgroud)
对于最后的"如何从中读取?" 部分,它可能看起来像这样:
string result = reader.First()["Status"].ToString();
Run Code Online (Sandbox Code Playgroud)
将连接字符串添加到app.config或web.config中的AppSettings部分.
public string GetSqlConnection()
{
return System.Configuration.ConfigurationManager.AppSettings["SqlConnectionString"];
}
Run Code Online (Sandbox Code Playgroud)
//返回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;
}
Run Code Online (Sandbox Code Playgroud)
要使用该功能:
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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31302 次 |
| 最近记录: |