题外话
有的时候,需要把图片存入数据库。
这样做,有好处,当然也有坏处。
好处是,如果图片存在数据库,则后期维护方便得多。
因为如果文件存在磁盘上,那么随着开发时间的增加,最后我们难以分辨哪些图片文件是有用的,哪些不是。
如果存在数据内部,则好管理得多。
然而存在数据库内部,会导致我们程序启动和加载困难。
所以,这里需要有取舍与限制和缓存。
不过,对于程序,我更希望前期多费点劲,后期少维护。
人们常说,行百里路者半九十。
但做程序,可不能这样,如果眼看着要做成了,但几个小问题搞得痛不欲生(要是遇上性能问题,就更傻眼)。
还不如,压住节奏,稳扎稳扎。
毕竟程序与行路,还是有很大差别的。最后十里,咬咬牙也就走过去了,可是许多程序,走不过最后几步。
所以,我宁愿图片存入数据库。
一般来讲,我会倾向于CS结构,因为这种程序,给用户的感知好,并且能减小服务器压力。
如果图片存在数据库,最好在Client端,把图片进行缓存,比如存到本地数据库或本地磁盘。
当然,本文不讲这些事情。下面回正题。
问题的提出与解决
首先建立了一个数据库的表,这个表中,有一个字段是image类型(SQL Server数据库)
USE [SchedulerDB]
GO
/****** Object: Table [dbo].[Resources] Script Date: 11/19/2014 10:16:03 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Resources]') AND type in (N'U'))
DROP TABLE [dbo].[Resources]
GO
USE [SchedulerDB]
GO
/****** Object: Table [dbo].[Resources] Script Date: 11/19/2014 10:16:03 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Resources](
[UniqueID] [int] IDENTITY(1,1) NOT NULL,
[ResourceID] [int] NOT NULL,
[ResourceName] [nvarchar](50) NULL,
[Color] [int] NULL,
[Image] [image] NULL,
[CustomField1] [nvarchar](max) NULL,
CONSTRAINT [PK_Resources] PRIMARY KEY CLUSTERED
(
[UniqueID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'岗位' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Resources'
GO
然后与datagrid进行了映射。
然后,在image字段上,绑定一个ImageEdit编辑控件。
然后运行,
然后,就得到这个错误:Object must implement IConvertible
网上找了找,没有。
然后我就试了试
把PictureStoreMode改成ByteArray
然后就OK了。
对了,保存所对应的代码为:
void saveToolStripButton_Click(object sender, EventArgs e)
{
this.Validate();
this.resourcesBindingSource.EndEdit();
this.resourcesTableAdapter.Update(this.schedulerDBDataSet);
schedulerDBDataSet.AcceptChanges();
}
====================
有同仁问关于图像大小如何自适应,实际我也不会。
不过,这张图,也许有用,所以放在这里:
后面又找了找:
在例子:
C:\Users\Public\Documents\DevExpress Demos 17.1\Components\WinForms\CS\GridMainDemo
demo center 的 winforms
--
也是同样的道理。
路径在:
C:\Users\Public\Documents\DevExpress Demos 17.1\Components\WinForms\CS\GridMainDemo