【问题标题】:How can I set a NULL value for an image如何为图像设置 NULL 值
【发布时间】:2012-08-05 16:48:04
【问题描述】:

我创建了一个加载图像然后将其保存到数据库中的表单。

如果用户没有选择任何图像,我想将值 NULL 保存到数据库中。

我试过这段代码:

drow[1] = string.IsNullOrEmpty(imgData.ToString()) ? DBNull.Value : (object)imgData;

但它给了我这个错误:

对象引用未设置为对象的实例

这是我用来加载图像的代码:

private void simpleButton5_Click_1(object sender, EventArgs e)
{
    try
    {
        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            picture.ImageLocation = openFileDialog1.FileName;

            imgData = File.ReadAllBytes(openFileDialog1.FileName);
        }
    }
    catch (Exception ex)
    {
        // Could not load the image - probably related to Windows file system permissions.
        XtraMessageBox.Show(String.Format("Cannot display the image.\n You may not have permission to read the file, or it may be corrupt.\n\nReported error: {0}", ex.Message));
    }
}

【问题讨论】:

  • 你为什么在imgData上打电话给ToString()?如果imgDatanull,那将引发异常。
  • 我认为更多的代码会有所帮助。 imgData 的类型是什么?卓尔的类型是什么,它的运行时价值是什么?

标签: c# sql-server winforms ado.net


【解决方案1】:

你在那一行做了一些不必要的事情。没有必要使用ToString(),它实际上是有害的,因为如果imgData null,你会得到一个NullReferenceException。只需直接将值与null 进行比较即可。

这样会更好,并且不受 NullReferenceException 的影响:

drow[1] = imgData == null ? DBNull.Value : (object)imgData;

【讨论】:

  • 或者(稍微紧凑一点):drow[1] = imgData ?? (object)DBNull.Value;
【解决方案2】:

变量 drow 或 imageData 为空。他们需要引用一个对象才能执行数组取消引用或调用 ToString()。调试器应该能够告诉你哪个变量是罪魁祸首。

【讨论】:

    猜你喜欢
    • 2019-06-03
    • 2016-04-05
    • 2021-03-13
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多