2011-08-03 1 views
1

こんにちは私はストアドプロシージャからXMLを取得するためにリーダーを使用しています。それは何かを返すべきではありませんが、私のコードは失敗しています..それは行があると言いますが、それがreader.GetString(0);それはData is Null. This method or property cannot be called on Null values.データリーダーそこに項目があると言われてもnullを返します

ヌルintハットラインを確認する方法をXML = reader.GetString(0);それはwhile(reader.Read()& & reader.HasRows)チェック..私はデバッグするときアイテムがあると言うが、上記の行になると、データがnullエラーですthrowを渡しています。これをどうすれば解決できますか?ここで

は私のコードあなたがnullをチェックする方法をにIsDBNull使用することができます

SqlDataReader reader = myCommand.ExecuteReader(CommandBehavior.CloseConnection); 

     string XML = ""; 

     while (reader.Read() && reader.HasRows) 
     { 
       XML = XML + reader.GetString(0); 
     } 

     XML = "<ProductList>" + XML + "</ProductList>"; 

     reader.Close(); 
     myConnection.Close(); 

     return XML; 
+0

あなたの質問は何ですか? –

+0

答えには関係ありませんが、 "xmlOut"とは何ですか – kd7

+0

ああ、その間違い..今変更中 – user710502

答えて

2

使用を。 IsDBNullファースト:

if (!reader.IsDBNull(0)) 
{ 
    XML = XML + reader.GetString(0); 
} 
1

である:それは冗長だと誰かに指摘したように削除reader.HasRowsは(呼び出し

while (reader.Read())   
{ 
    if (!reader.IsDBNull(0)) 
    {   
     XML = XML + reader.GetString(0) 
    } 
} 

UPDATE else)。

0

私が正しいと覚えていれば、while(reader.Read()はデータがなくても一度ループを通過しますが、間違えている可能性があります。 (0).ToString()私はGetValueメソッドに(0)のGetStringを変更します

while(reader.read()) 
{ 
    if(reader.HasRows) 
    { 
     XML = XML + reader.GetString(0); 
    } 
} 

のような場合は、ネストされたが、違いを生むないかもしれないが、ヌルが関与しているときのGetStringとGetValueメソッドは動作が異なります

+0

いいえ、それはdo {} while() – user710502

+0

リーダー( "db_column_name")を使ってみましたか? – Maysam

関連する問題