これは私が時折返すものですが、まだ決定的な答えは見つかりませんでした。うまくいけば、私はそれがマイクロソフトが言語を遺産にする(冗談...ちょっと)前にそれを得るだろう...foreachループで宣言されたときのSQLDataReaderオブジェクト
これはほぼ間違っているが、これは私がSQLServerからレコードを取得してきた方法です...私は各行それをIDataRecordとして呼び出し元に渡し、SQLDataREaderオブジェクトを使用してそれを反復処理します。私は、usingステートメントで宣言されていなければ、datareaderは使用後に閉じなければならないと読んでいます。私はこれを閉じるべきですか?私のSqlDataReaderのは、このようなforeachループ内で宣言され
...
IEnumerable<IDataRecord> dataset = Select("SELECT Topic FROM Topics WHERE pti=" + pid + " and Ignore = 0");
foreach (SqlDataReader reader in dataset)
{
string topic = reader.GetString(0);
//... do something
}
マイデシベルコール:
public IEnumerable<IDataRecord> Select(string sql, List<SqlParameter> sparams = null)
{
using (SqlConnection cn = new SqlConnection(ConnString()))
{
cn.Open();
using (SqlCommand cmd = new SqlCommand(sql, cn))
{
if (sparams != null)
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddRange(sparams.ToArray());
}
else
{
cmd.CommandType = CommandType.Text;
}
using (SqlDataReader rdr = cmd.ExecuteReader())
{
if (rdr != null && rdr.FieldCount > 0)
{
while (rdr.Read())
{
yield return rdr;
}
}
}
}
cn.Close();
}
}