0

C# を使用して SQL で列型 'uniqueidentifier' を読み込もうとしています

SqlCommand myCommand = new SqlCommand();

myCommand.CommandText = "SELECT templatename, subject, bodyhtml, sender, emailTemplateBodyFields.fieldid FROM emailTemplates left join emailtemplaterecipients on emailtemplates.emailtemplateid = emailtemplaterecipients.emailtemplateid left join emailTemplateBodyFields on emailtemplates.emailtemplateid = emailTemplateBodyFields.emailtemplateid WHERE emailtemplates.emailtemplateid = " + selectedEmailTemplateID;

myCommand.Connection = connection;
SqlDataReader myReader = myCommand.ExecuteReader();

while (myReader.Read())
{
    NewTemplateName = myReader.GetString(0);
    NewSubject  = myReader.GetString(1);
    NewBodyHTML = myReader.GetString(2);
    NewRecipients = myReader.GetString(3);
    myRecipientList.Add(NewRecipients);

    Guid tempGUID = myReader.GetGuid(4);
    NewBodyFields = Convert.ToString(tempGUID);
    myBodyList.Add(NewBodyFields);

ただし、null 値の例外が発生しています。データは null です

Guid tempGUID = myReader.GetGuid(4);

SQL Server でステートメントを実行すると、列に null 値がありません。

この列から情報を取得する方法を教えてください。

ありがとう。

4

1 に答える 1

3

to を使用しLEFT JOINていemailTemplateBodyFieldsます。そのテーブルに対応するレコードが存在しない場合は、テーブルに存在するレコードが null ではない場合でも、結果セットに null 値が含まれる可能性がfieldidあります。の結果を確認できIsDBNullます。例外が発生した行に対して true が返されることがわかります。

これを修正するには、クエリを修正して null 値を取得しないようにするか、 をIsDBNull呼び出す前に確認して null 値を処理できるように準備してGetGuidください。

コードの 2 つのサイド コメント:

  • selectedEmailTemplateIDユーザー入力から来ていますか?悪意のあるユーザーが に設定するとどうなり"1; DROP TABLE emailTemplates"ますか? あなたのクエリは何をしますか?パラメータを使用します。
  • 必ずリソースを解放してください。キーワードはこれを非常に簡単にするので、usingそうしない言い訳はありません。
于 2012-11-15T11:08:25.147 に答える