3

3 つの整数を返す SQLDataReader があります。ただし、2 つの整数が null 値を返す場合があります。

これを回避するために、次のように書きました。

int shoppingCartHeadID = 0;
int billID = 0;
int delID = 0;

conn.Open();
reader = comm.ExecuteReader();
if (reader.Read())
{
       shoppingCartHeadID = Convert.ToInt32(reader["shoppingCartHeadID"]);

       if (!reader.IsDBNull(billID))
       {
            billID = Convert.ToInt32(reader["billID"]);
       }

       if (!reader.IsDBNull(delID))
       {
            delID = Convert.ToInt32(reader["delID"]);
       }                
}
reader.Close();

残念ながら、まだエラーメッセージが表示されます。助言がありますか?

PS私もこれを試してみましたが運が悪かったです

if (reader["billID"] != null)

4

2 に答える 2

4

存在しない列名を渡す場合に備えて、列名ではなくインデックスでアクセスしようとします。

また、リーダーを using ブロックでラップしていることを確認してください。これにより、例外が発生した場合でも、リーダーは適切に閉じられ、破棄されます。たとえば、次のようになります。

...
using(var reader = comm.ExecuteReader())
{
    if (reader.Read())
    {
           shoppingCartHeadID = Convert.ToInt32(reader[0]);

           if (!reader.IsDBNull(1))
           {
                billID = Convert.ToInt32(reader[1]);
           }

           if (!reader.IsDBNull(2))
           {
                delID = Convert.ToInt32(reader[2]);
           }
    }
}
于 2011-10-10T11:05:30.330 に答える
0

GetXXXX(colIndex)メソッドを使用します。

if (!reader.IsDBNull(0)) // I presume that billid at 0 ordinal  
 {
    billID = reader.GetInt32(0);
 }
if (!reader.IsDBNull(1)) // I presume that delId at 1 ordinal
 {
    delID = reader.GetInt32(1);
 }  
于 2011-10-10T11:38:04.090 に答える