这里介绍两种种方法。
1,SqlDataReader的GetSqlBytes方法用于检索varbinary(max)列的内容。
reader = commandExecuteReader(CommandBehaviorSequentialAccess);
while (readerRead())
SqlBytes bytes = readerGetSqlBytes(0);
例1从NorthWind数据库的Employees表读取雇员图像并显示。SqlDataReader的GetSqlBytes方法返回一个SqlBytes对象,该对象公开Stream属性。使用该属性创建新的Bitmap对象,然后以Gif ImageFormat格式保存到Stream。
private void ReadPhoto(string lastName) //读取雇员图像并显示
{
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
Stream s = new MemoryStream(); //创建一个以内存为后备存储的流
SqlCommand command = connectionCreateCommand();
SqlDataReader reader = null;
try
{
commandCommandText = "SELECT LastName,Photo FROM dboEmployees " +
" WHERE LastName=@LastName";
commandCommandType = CommandTypeText;
//声明参数并赋值
SqlParameter parameter = new SqlParameter("@LastName", SqlDbTypeNVarChar, 20);
parameterValue = lastName;
commandParametersAdd(parameter);
connectionOpen();
//修改DataReader的默认行为,SequentialAccess按顺序接收数据并立即加载
//CloseConnection指明关闭DataReader时,对数据库的连接也关闭
reader = commandExecuteReader(
CommandBehaviorSequentialAccess|CommandBehaviorCloseConnection);
if (readerHasRows)
{
while (readerRead())
{
//SequentialAccess要求按顺序接收数据,先接受reader[0]
thislabel1Text = reader[0]ToString();
if (readerIsDBNull(1)) //若列值为空返回
return;
else
{
//使用readerGetSqlBytes获取图像数据
SqlBytes bytes = readerGetSqlBytes(1);
using (Bitmap productImage = new Bitmap(bytesStream))
{
//以gif格式保存在Stream流并显示
productImageSave(s, SystemDrawingImagingImageFormatGif);
thispictureBox1Image = SystemDrawingImageFromStream(s);
} } }
}
else
MessageBoxShow("No records returned");
}
catch (Exception ex)
{
MessageBoxShow(exMessage);
}
Finally
{
if (reader != null)
readerDispose(); //关闭DataReader,同时关闭对数据库连接
}
sClose(); //关闭流
}
}
本程序将DataReader设置为SequentialAccess,要求顺序访问字段,所以先读取LastName小数据,再读取图像大数据。程序运行后从组合框选取雇员的LastName,将在图形框出现雇员的图像,
2,SqlDataReader的GetSqlBinary方法可用于检索varbinary(max)列的内容。
reader = commandExecuteReader(CommandBehaviorCloseConnection);
while (readerRead())
SqlBinary binaryStream = readerGetSqlBinary(0);
例2 AdventureWorks2008数据库中的ProductionProductPhoto表含有图形列LargePhoto,数据类型是varbinary(max),可空。用GetSqlBinary方法检索图形数据的代码如下:
private void ReadPhoto(int documentID) //输入参数documentID是产品ID
{
using (SqlConnection connection = new SqlConnection(GetConnectionString()))
{
thislabel1Text = documentIDToString();
try
{
string queryString = "SELECT LargePhoto FROM ProductionProductPhoto " +
"WHERE ProductPhotoID=@ProductPhotoID";
SqlCommand command = new SqlCommand(queryString, connection);
SqlParameter paramID = new SqlParameter("@ProductPhotoID", SqlDbTypeInt);
paramIDValue = documentID;
commandParametersAdd(paramID);
connectionOpen();
//修改DataReader的默认行为
SqlDataReader reader = commandExecuteReader(
CommandBehaviorSequentialAccess|CommandBehaviorCloseConnection);
if (readerHasRows)
{
while (readerRead())
{
if (readerIsDBNull(0))
return;
else
{
Stream s = new MemoryStream();
SqlBinary binaryStream = readerGetSqlBinary(0);
//根据SqlBinary值初始化SqlBytes类的新实例
SqlBytes bytes = new SqlBytes(binaryStream);
using (Bitmap productImage = new Bitmap(bytesStream))
{
//用gif格式保存图形
productImageSave(s, SystemDrawingImagingImageFormatGif);
thispictureBox1Image = SystemDrawingImageFromStream(s);
}
sClose();
} }
}
else
MessageBoxShow("No records returned");
}
catch (Exception ex)
{
MessageBoxShow(exMessage);
} }
}
下图为documentID=100的自行车类型
以上示例取自C#编程指南但尧编著清华大学出版社2011年1月
第一步打开sql server数据库,点击文件->打开->文件,如下图所示:
第二步选择要导入的sql文件,点击打开,如下图所示:
第三步打开sql文件之后,点击执行,如下图所示:
第四步可以看到sql文件已经成功执行,如下图所示:
第五步sql文件成功执行之后,已经将数据库导入到sql server中,需要注意的是如果数据库没有显示,鼠标右键数据库,进行刷新,如下图所示:
mysql数据库是可以存储的, *** 作方法:
1、具体的脚本代码如下,其中我们假定文件上传域的名称为Picture;
2、这样,我们就可以成功的把保存到数据库中。如果在将插入MySQL的过程中出现问题,可以检查一下MySQL数据库所允许的最大数据包的大小。如果设置值过小的话,我们会在数据库的错误日志中找到相应的记录;
3、提取方法:编写两个文件。其中,第一个文件作为HTML页面的模板,定位的显示位置。第二个文件则被用来从数据库中实际输出文件流,作为<IMG>标签的SRC属性;
4、当HTML页面被浏览时,每显示一副就会调用一次Secondphp3文件。当第二个文件被调用时会传入相应的Picture ID,我们可以借此从数据库中取回对应的并显示。
在设计到数据库的开发中,难免要将或音频文件插入到数据库中的情况。一般来说,我们可以同过插入文件相应的存储位置,而不是文件本身,来避免直接向数据库里插入的麻烦。但有些时候,向MySQL中插入更加容易管理。
1.打开数据库管理工具并在数据库中创建两个用于测试的新表,在这里,这两个表的表结构应该是相同的。
2.打开一个新的SQL查询窗口来创建一个存储过程。这意味着将插入到TEST中的数据插入到TEST1中。
3.单击“执行”,将创建一个名为“T”的新触发器。输入代码:USE[PHCTIAOMA]GO
/*****object:trigger[dbo].[T]scriptdate:10/28/201708:37:34*****/setANSI_NULLSONGOSETQUOTED_
IDENTIFIERONGOCREATEtrigger[dbo].[T][dbo].[test]forinsertasbegininsertintodbo.TEST1selectstheID,name,andagefrominsertedendGO.
4.展开表结构,可以看到新的触发器‘T’。
5.现在先在TEST表中插入一条数据做测试。INSERTINTOdbo.TESTVALUES('1','Simon','25')。
6.提示两次成功插入数据,然后查看TEST1中的数据是否及时更新。从dbo中选择*。test1,数据被成功写入。
是属于大字段。一张可能1m到几m。
尽量不要存储在数据库中。这样的大字段数据会加重数据库的负担,拖慢数据库。在大并发访问的情况下很重要。这是一个经验。去看看dba对数据库性能调优方面的分析都能得到这个答案的:就是不要存储在数据库中。
三种东西永远不要放到数据库里,,文件,二进制数据。作者的理由是,
对数据库的读/写的速度永远都赶不上文件系统处理的速度
数据库备份变的巨大,越来越耗时间
对文件的访问需要穿越你的应用层和数据库层
存储路径,上传时候获取存放的路径,然后存储路径。
上面这个是存储的路径,文件存储在服务器的磁盘上。
不需要原,实际上你可以把它理解成文件流。所以说你只需要读取到数据库的二进制到然后解析还原成原就可以了。像你这种情况应该是还原的方法不对或者是二进制有问题。
这是我的一段你参照下看可以不:
byte[] MyData = new byte[0];
if (MyData != null && !RowGetString("CstSignature")IsNullOrEmpty())
{
MyData = (byte[])Row["CstSignature"];//读取第一个的位流
int ArraySize = MyDataGetUpperBound(0);//获得数据库中存储的位流数组的维度上限,用作读取流的上限
FileStream fs = new FileStream(@"c:/00jpg", FileModeOpenOrCreate, FileAccessWrite);
fsWrite(MyData, 0, ArraySize);
fsClose(); //-- 写入到c:/00jpg。
(thisFindControl("picPhoto") as StarPictureBox)Image = ImageFromFile("c:/00jpg");
}
方法:
1、首先打开SQL SERVER自带的数据库管理工具,从开始菜单中可以找到,如图点击进去;
2、开始连接SQL SERVER服务器,就是我们装好的SQL SERVER 服务器;
3、如图,右击数据库,选择第一个,新建一个数据库;
4、填写数据库的名称(箭头方向),下面是设置自动增长的,一般不用管,默认
5、点击确定后就可以生成一个数据库,此时里面是没有表的;
6、右击表新建一个表,填写你要的字段名称
7、填完字段名称后点击字段名称那个内部窗口的小叉叉,然后就提示你输入表名了,填写下表名,一个数据库的建立过程就是这样的;
注意事项:
建立数据库需要先打开数据库服务器。
1、首先打开SQL Server后,选择数据库,点击顶部的新建查询按钮,如下图所示。
2、然后直接用sp_addtype语句进行数据类型的定义,如下图所示。
3、接下来刷新用户自定义数据类型,这次就有数据了,如下图所示。
4、接着右键数据表选择设计选项,如下图所示。
5、最后就可以在数据类型里面找到自定义的数据类型了,如下图所示。
以上就是关于C#读出SQL数据库中存储的图片到picturebox全部的内容,包括:C#读出SQL数据库中存储的图片到picturebox、sql怎么导入数据库文件、mysql数据库可以存图片吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)