1

我想改进我的代码。我收到此错误是因为它要求将图片添加到数据库中,并且我认为它与图像的 cmd 参数的 if 语句有关。以下代码说明如果这些文本框为空,则突出显示它们并显示警告消息。它在所有字段为空时有效,但是当我输入 ID 和名字的详细信息时,我将收到一条错误消息“没有为一个或多个必需参数提供值”然后它崩溃。当我重新运行程序并再次进行测试但这次添加图像时,它应该可以正常工作。

理想情况下,我想输入详细信息并可以选择稍后插入图像。这可以做到吗?如果有人可以帮助我,请提前感谢您。

这是我的部分代码......

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

在搜索记录以显示正确的图像时,我必须包含以下代码。所以现在它可以正常工作了。直到后来我打开这个帖子时,我才意识到我应该在 Goggle 上搜索“如何将空值传递给数据库”。现在无所谓了。。

 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

2

如果要为第三个参数提供空值,则可以使用

cmd.Parameters.AddWithValue("@Photo", DBNull.Value);
于 2013-10-10T14:38:41.903 回答