this questionと似ていますが、答えは決して私が知りたいと思っているものではありません。 DataReaderから値を取得する際の基準はありますか?すなわち、これと同じ/ /悪いことより良いと考えられ、このDataReaderのベストプラクティス
dataReader.GetString(dataReader.GetOrdinal("ColumnName"));
のですか?ここで
(string) dataReader["ColumnName"];
this questionと似ていますが、答えは決して私が知りたいと思っているものではありません。 DataReaderから値を取得する際の基準はありますか?すなわち、これと同じ/ /悪いことより良いと考えられ、このDataReaderのベストプラクティス
dataReader.GetString(dataReader.GetOrdinal("ColumnName"));
のですか?ここで
(string) dataReader["ColumnName"];
私はそれを行う方法です。
Int32 ordinal = dataReader.GetOrdinal("ColumnName");
if (!dataReader.IsDBNull(ordinal))
yourString = dataReader.GetString(ordinal);
フィールドがDataReader
にnullの場合、それは時に例外がスローされますので、私が上に示されているようDBNull
をチェックすることが重要ですあなたはそれを取得しようとします。
私はこれは私がnullかどうかを確認し、C#??
オペレータにデフォルト値を適用することができますなど、私が列挙としてIDataReader
を扱うようにすると、NULL可能int型を返すことによってDbNull
に対処するためにいくつかの拡張メソッドを作りました。 IDataReader
上の他のGetDataType()
方法について
/// <summary>
/// Returns an IEnumerable view of the data reader.
/// WARNING: Does not support readers with multiple result sets.
/// The reader will be closed after the first result set is read.
/// </summary>
public static IEnumerable<IDataRecord> AsEnumerable(this IDataReader reader)
{
if (reader == null)
throw new ArgumentNullException("reader");
using (reader)
{
while (reader.Read())
{
yield return reader;
}
}
}
public static int? GetNullableInt32(this IDataRecord dr, string fieldName)
{
return GetNullableInt32(dr, dr.GetOrdinal(fieldName));
}
public static int? GetNullableInt32(this IDataRecord dr, int ordinal)
{
return dr.IsDBNull(ordinal) ? null : (int?)dr.GetInt32(ordinal);
}
...というように。
単に 'reader.Cast
'IDataReader'が' IEnumerable'と何か関係があるとしたらどうでしょうか?しかし、そうではありません。 'public interface IDataReader:IDisposable、IDataRecord' –
' while(reader.Read()) 'ループの後で読者を閉じたいかもしれません。 –
絶対に同意します。 DataReaders Item []機能を使用し、提供されたDataReader.Getメソッドを使用して、実際の値を取得する構文的な違いについてより詳しく質問しています。 –
私はいつも、datareader ["column1"]を読むのがはるかにいいです。 –
'datareader [" column "]'形式はオブジェクトを返し、強く型付けされていないので、データが 'DbNull'の場合は例外が発生するとは思われません。 'DbNull.Value'を' object'にキャストするだけです。もちろん、最初に 'Convert.IsDbNull'チェックをしないと、値を使用しようとすると例外が発生することがあります。 –