0

プロジェクトにSqlConnectionがあり、クエリ結果を制御したい

public IEnumerable<Product> ListPrpductByCategory(int ID)
{

    var dr = db.ExecuteReader(@"SELECT P.ID,P.CategoryID,P.Name,P.SupplierID,p.UnitPrice,p.UnitsInStock,pp.PicturePath 
                                FROM Products P 
                                LEFT JOIN ProductPhoto PP ON p.ID=PP.ProductID   
                                WHERE P.CategoryID=@ID",
                                Values: new object[] { ID });
    while (dr.Read())
    {
        yield return new Product()
        {
            ID = dr.GetInt32(0),
            CategoryID = dr.GetInt32(1),
            SupplierID = dr.GetInt32(3),
            Name = dr.GetString(2),
            UnitPrice = dr.GetDecimal(4),
            UnitInstock = dr.GetInt16(5),
            PicturePath = dr.GetString(6)
        };
    }
    dr.Close();

    //...
}

画像がない場合はエラーが発生しdr.GetString(6) ます

if(dr.GetString(6)==null)
    PicturePath="Noimage.jpg";

どうやってやるの?

4

3 に答える 3

3

私は通常、それらを次のように書きます。

PicturePath = dr.IsDBNull(6) ? "Noimage.jpg" : dr.GetString(6)

また、データ リーダーをusingステートメントでラップする必要があります。

using(var dr = db.ExecuteReader(...))
{
    while (dr.Read())
    {
        ...
    }
} //no need to call Close, as Dispose already closes the reader.
于 2013-02-04T01:04:54.300 に答える
2

null合体演算子を使用してみてください

PicturePath = GetString(6) ?? "Noimage.jpg",
于 2013-02-04T00:03:05.453 に答える
1

IsDBNullを試してください:

if(dr.IsDBNull(6))
PicturePath = "Noimage.jpg";
else
PicturePath = dr.GetString(6);
于 2013-02-04T00:03:33.813 に答える