2012-05-11 33 views
1

VendorIDがそのレコードに対してnullであるため、このエラーが発生し続けます。私はこの質問が2,3回尋ねられているのを見てきました。変換する前にヌルかどうかを確認してdbtableに入力する必要があるようですが、どうすればよいか分かりません。'System.String'型に 'System.DBNull'型のオブジェクトをキャストできません。エラー

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 =(文字列)dbReader.GetValue(5);" VendorIdがnullであるため、エラーが発生します。

答えて

3

この試してみてください。

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

    return o.ToString(); 
} 

し、それを使用します:ヘルパー関数を記述することです

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

より良いを

aPartOrder.VendorId = MyToString(dbReader.GetValue(5)); 
+0

私はそれが好きです、ありがとう –

0

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

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

提案:常にSQL-Injection攻撃を防ぐために、パラメータ/プリコンパイルされたSQLステートメントを使用します。この特定の行の

cmd.CommandText = "SELECT * FROM PartOrder WHERE OrderNo = @OrderNo"; 
cmd.Parameters.Add("@OrderNo",System.Data.OleDb.OleDbType.VarChar,20).Value=orderNo; 
dbReader = cmd.ExecuteReader(); 
+0

提案パラメータの提案のための –

+1

+1に感謝を! – TheVillageIdiot

1

ワンラインアンズR

aPartOrder.VendorId = dbReader.IsDBNull(5) ? "" :(string)dbReader.GetValue(5); 
0

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

関連する問題