我想改进我的代码。我收到此错误是因为它要求将图片添加到数据库中,并且我认为它与图像的 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;
}
感谢上帝