我遇到一个问题,当我想将图像插入数据库但路径为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", "");
}
答案 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时设置默认图像。这样你就不会一遍又一遍地保存相同的默认图像。