1

コードを改善したいと思います。データベースに画像を追加するように求めているため、このエラーが発生しました。画像の cmd パラメーターの if ステートメントと関係があると思います。次のコードは、これらのテキストボックスが空の場合にそれらを強調表示して警告メッセージを表示することを示しています。すべてのフィールドが空の場合は機能しますが、ID と名の詳細を入力すると、「1 つ以上の必須パラメーターに値が指定されていません」というエラー メッセージが表示され、クラッシュします。プログラムを再実行してテストを再度実行すると、今回はイメージを追加すると、正常に機能します。

理想的には、詳細を入力し、後で画像を挿入できるようにしたいと考えています。これはできますか?誰かが私を助けることができれば、事前に感謝します.

これは私が持っている部分的なコードです...

if (Convert.ToInt32(cmdCheck.ExecuteScalar()) == 0)
 {
      if (!string.IsNullOrEmpty(txtID.Text) && 
      !string.IsNullOrEmpty(txtFirstName.Text) && (pictureBox1.Image == null))
      {
        cmd.CommandText = (@"INSERT INTO MainDetails (ID, FirstName, Photo)
        VALUES(@ID, @FirstName, @Photo)");

        cmd.Parameters.AddWithValue("@ID", txtID.Text);
        cmd.Parameters.AddWithValue("@FirstName", FirstName.Text);


           // I think this where the problem is and if I change to 
           // pictureBox1.Image == null it will still give me problems.   

           if (pictureBox1.Image != null)
           {
              ms = new MemoryStream();
              pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
              byte[] photo_aray = new byte[ms.Length];
              ms.Position = 0;
              ms.Read(photo_aray, 0, photo_aray.Length);
              cmd.Parameters.AddWithValue("@Photo", photo_aray);
            }
        cmd.ExecuteNonQuery();
      }
  }

写真プロパティの MS Access 2003 データベースでは、「いいえ」が必要です。

更新 1

if (pictureBox1.Image != null)
                 {
                     ms = new MemoryStream();
                     pictureBox1.Image.Save(ms, ImageFormat.Jpeg);
                     byte[] photo_aray = new byte[ms.Length];
                     ms.Position = 0;
                     ms.Read(photo_aray, 0, photo_aray.Length);
                     cmd.Parameters.AddWithValue("@Photo", photo_aray);
                 }
                 else
                 {
                     cmd.Parameters.AddWithValue("@Photo", DBNull.Value); //Gord's code
                 }

更新 2

正しい画像を表示するには、レコードを検索するときに次のコードを含める必要があります。そのため、今では正常に機能しています。その後、このスレッドを開いて、ゴーグルで「データベースに null 値を渡す方法」を検索する必要があることに気付きました。今は関係ない..

 if (dreader["Photo"] != System.DBNull.Value)
                 {
                     photo_aray = (byte[])dreader["Photo"];
                     MemoryStream ms = new MemoryStream(photo_aray);
                     pictureBox1.Image = Image.FromStream(ms);
                 }
                  else 
                     {
                         pictureBox1.Image = null;
                     }

ありがとうございます

4

1 に答える 1