没有图像就没有保存

时间:2018-01-03 12:46:11

标签: c#

如果需要,我需要保存此记录而不使用图像。

这是我的代码我也使用了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

1 个答案:

答案 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的任何内容 - 因此出错。