如果需要,我需要保存此记录而不使用图像。
这是我的代码我也使用了if语句:
private void btnsave_Click(object sender, EventArgs e)
{
try
{
string commandText = "INSERT INTO Stock_Jewelry VALUES(@Stock_Type,@stock_no,@Quantity,@image)";
SqlCommand command = new SqlCommand(commandText, conn);
command.Parameters.Add("@Stock_Type", SqlDbType.VarChar);
command.Parameters["@Stock_Type"].Value = Stock_Type.Text;
command.Parameters.Add("@stock_no", SqlDbType.NVarChar);
command.Parameters["@stock_no"].Value = txt_stock_no.Text;
command.Parameters.Add("@Quantity", SqlDbType.Int);
command.Parameters["@Quantity"].Value = txt_qty.Text;
if(pb1 != null) {
MemoryStream stream = new MemoryStream();
pb1.Image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] pic = stream.ToArray();
command.Parameters.AddWithValue("@image", pic);
}
else {
pb1 = null;
}
command.ExecuteNonQuery();
MessageBox.Show("You've inserted successfully!", "Successful Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.Hide();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
从评论中编辑:
如果我在没有图片的情况下进行保存,我可以保存图像:
object reference not set to an instance of an object
答案 0 :(得分:0)
如果您的图片列允许null
值,请更改为
if(pb1 != null)
{
MemoryStream stream = new MemoryStream();
pb1.Image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] pic = stream.ToArray();
command.Parameters.AddWithValue("@image", pic);
}
else
{
command.Parameters.AddWithValue("@image", System.Data.SqlTypes.SqlBinary.Null);
// edit: replaced incorreect DBNull.Value due to comment by Heinzi
}
System.Data.SqlTypes.SqlBinary.Null
目前,如果pb1 is null
,您没有为Sql提供足够的参数。构造Sql时,它尝试访问附加到SqlCommand实例的SqlParameterCollection。在SqlCommand中找不到@image
的任何内容 - 因此出错。