1

そのレコードの VendorID が null であるため、このエラーが発生し続けます。この質問が数回聞かれているのを見たことがありますが、変換して dbtable に入力する前に null かどうかを確認する必要があるようですが、その方法がわかりません。

public static PartOrder findPartOrder(string orderNo)
    {
        PartOrder aPartOrder = new PartOrder();
        OleDbDataAdapter myAdapter = new OleDbDataAdapter();
        if (aConnection.State == ConnectionState.Closed)
            aConnection.Open();
        OleDbCommand cmd = aConnection.CreateCommand();
        OleDbDataReader dbReader = null;
        cmd.CommandText = "SELECT * FROM PartOrder WHERE OrderNo = '" + orderNo + "'";
        dbReader = cmd.ExecuteReader();

        while (dbReader.Read())
        {
            aPartOrder.OrderNo = (string)dbReader.GetValue(0);
            aPartOrder.Length = (string)dbReader.GetValue(1);
            aPartOrder.Finish = (string)dbReader.GetValue(2);
            aPartOrder.Cost = (string)dbReader.GetValue(3);
            aPartOrder.PartDrawingNo = (string)dbReader.GetValue(4);
            aPartOrder.VendorId = (string)dbReader.GetValue(5);
            aPartOrder.ShopId = (string)dbReader.GetValue(6);
            aPartOrder.Completed = (string)dbReader.GetValue(7);
        }

        dbReader.Close();
        return aPartOrder;
    }

繰り返しますが、「aPartOrder.VendorId = (string)dbReader.GetValue(5);」という行です。VendorId が null であるため、エラーが発生します。

4

4 に答える 4

3

この特定の行については、これを試してください:

aPartOrder.VendorId = dbReader.GetValue(5)==DBNull?"":dbReader.GetValue(5).value;

ヘルパー関数を書く方が良いでしょう:

private static string MyToString(object o)
{
    if(o == DBNull.Value || o == null) 
       return "";

    return o.ToString();
}

そしてそれを使用します:

aPartOrder.VendorId = MyToString(dbReader.GetValue(5));
于 2012-05-11T05:21:35.230 に答える
1

1行の答え

aPartOrder.VendorId = dbReader.IsDBNull(5) ? "" :(string)dbReader.GetValue(5);
于 2012-05-11T05:21:36.483 に答える
0

を使用しOleDbDataReader.IsDBNull(ordinal)てフィールド値を確認します。

if(!dbReader.IsDBNull(5))
  aPartOrder.VendorId = dbReader.GetString(5);

提案: SQL インジェクション攻撃を防ぐために、常にパラメーター/プリコンパイル済み SQL ステートメントを使用してください。

cmd.CommandText = "SELECT * FROM PartOrder WHERE OrderNo = @OrderNo";
cmd.Parameters.Add("@OrderNo",System.Data.OleDb.OleDbType.VarChar,20).Value=orderNo;
dbReader = cmd.ExecuteReader();
于 2012-05-11T05:20:47.820 に答える
0

dbReader.GetValue(5).HasValue ? dbReader.GetValue(5).ToString() : String.Empty

于 2012-05-11T05:24:03.440 に答える