当路径为空时,如何将默认图像插入数据库?

时间:2013-12-12 01:36:04

标签: c# sql wpf visual-studio-2010

我遇到一个问题,当我想将图像插入数据库但路径为null时,我会想要将默认图片插入默认图片。这可能吗???

 if (imageName != "")
                {
                    MessageBox.Show(imageName);
                    //Initialize a file stream to read the image file
                    FileStream fs = new FileStream(@imageName, FileMode.Open, FileAccess.Read);
                    //Initialize a byte array with size of stream
                    byte[] imgByteArr = new byte[fs.Length];
                    //Read data from the file stream and put into the byte array
                    fs.Read(imgByteArr, 0, Convert.ToInt32(fs.Length));
                    fs.Close();
                    cmdInsert.Parameters.AddWithValue("@fImage", imgByteArr);
                }
                else {
                    imageName = @"/HouseWivesSavior;component/images/unknown.jpg";
                    //Initialize a file stream to read the image file
                    FileStream fs = new FileStream(@imageName, FileMode.Open, FileAccess.Read);
                    //Initialize a byte array with size of stream
                    byte[] imgByteArr = new byte[fs.Length];
                    //Read data from the file stream and put into the byte array
                    fs.Read(imgByteArr, 0, Convert.ToInt32(fs.Length));
                    fs.Close();
                    cmdInsert.Parameters.AddWithValue("@fImage", imgByteArr);
                    cmdInsert.Parameters.AddWithValue("@fImage", "");

                }

2 个答案:

答案 0 :(得分:1)

不要那样做。你为什么要在数据库中保留默认图像呢?这在存储和网络流量方面是昂贵的。想象一下,如果有1024条记录具有相同的默认图像200KB,那么您将浪费200MB的数据库存储空间。不仅如此,从数据库中检索BLOB是一项非常昂贵的操作。

避免它,如果路径为null,则准确插入一个空值。然后让您的业务逻辑决定在没有图像时该做什么。

顺便说一句,永远不要像你在问题中那样检查空字符串。请改用字符串对象的IsNullOrEmpty静态方法

if(!string.IsNullOrEmpty(imageName))

这将更有效地评估null和空值

希望有所帮助

利奥

答案 1 :(得分:0)

不是检查空字符串,而是检查null。

var imagePath = string.Empty;

if (imageName == null)
    imagePath = "pathToDefaultImage";
else
    imagePath = "pathToNonDefaultImage"

... do your work here using imagePath as the path

但您可以在数据库中保存null。然后,当您从数据库加载图像时,只需在遇到null时设置默认图像。这样你就不会一遍又一遍地保存相同的默认图像。