0

以下のコードで:

SqlCeDataReader myReader = cmd.ExecuteReader(CommandBehavior.SingleRow);
itemID = myReader.GetString(0);
packSize = myReader.GetString(1);

...「行/列のデータが存在しません」という例外が発生します

この場合、例外をスローするのではなく、黙って「中止」したいのです。試行された割り当ての前に最初にテストする方法はありますか?

私はこれを試しましたが、うまくいきません:

SqlCeDataReader myReader = cmd.ExecuteReader(CommandBehavior.SingleRow);
if (null != myReader.GetString(0))
{
    itemID = myReader.GetString(0);
}
if (null != myReader.GetString(1))
{
    packSize = myReader.GetString(1);
}

別の可能性は、それを try..catch でラップして例外を「食べる」ことですが、それが最善の方法かどうかはわかりません...

4

1 に答える 1

4

Read()これは、を取得した後にメソッドを呼び出さなかったためですDataReader。これは、結果にデータが含まれていないという意味ではありません。にデータが含まれていないことを意味します。

using (SqlCeDataReader myReader = cmd.ExecuteReader(CommandBehavior.SingleRow))
{
    if (myReader.Read()) // It returns `false` if there is no data
    {
        itemID = myReader.GetString(0);
        packSize = myReader.GetString(1);
    }
}

結果に複数の行が含まれる可能性があり、結果にデータが含まれているかどうかを確認したい場合は、次を使用しますHasRows

using (SqlCeDataReader myReader = cmd.ExecuteReader())
{
    if (myReader.HasRows)
    {
        while (myReader.Read())
        {
            // read values from `myReader`
        }
    }
}
于 2013-03-22T18:14:08.810 に答える