标题:SQL Server的图片存取
只看楼主
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
结帖率:66.67%
 问题点数:0 回复次数:14 
SQL Server的图片存取

由于比较多人问,问了又问,把我以前的代码共享一下。

using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;

// 下面是从数据库取出图片
try
{
string getPhoto = @"select photo from gch_Customer_Photo where customerID=1234";

DataSet ds = new DataSet();
sqlDataAdapter1 = new SqlDataAdapter(getPhoto, sqlConnection1);
sqlDataAdapter1.Fill(ds);

DataRow row = ds.Tables[0].Rows[0];
byte[] bPhoto = new byte[0];
bPhoto = (byte[])row["photo"];
//int arraySize = bPhoto.GetUpperBound(0);

MemoryStream memstr = new MemoryStream(bPhoto);
pictureBox1.Image = Image.FromStream(memstr, true);

existPhoto==true
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}

// 下面是将图片存入数据库

OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "*.bmp;*.jpg;*.gif|*.bmp;*.jpg;*.gif;*.jpeg";
if(ofd.ShowDialog()==DialogResult.OK)
{
string filePath = ofd.FileName;

FileInfo imageFile = new FileInfo(filePath);
if(imageFile.Length > 204800)
{
Console.WriteLine("图片大小最好不要过大!");
}

pictureBox1.Image = Image.FromFile(filePath);

if(existPhoto==true)
{ //如果之前已有图片,可以考虑删除了旧的先
string deleteOld = @"delete from gch_Customer_Photo where customerID=1234";
SqlCommand sqlcmmd = new SqlCommand(deleteOld,sqlConnection1);
sqlcmmd.ExecuteNonQuery();
}

string getAllPhotos = @"select customerID, photo from gch_Customer_Photo";

DataSet ds = new DataSet();
sqlDataAdapter1 = new SqlDataAdapter(getAllPhotos,sqlConnection1);
sqlDataAdapter1.MissingSchemaAction = MissingSchemaAction.AddWithKey;

FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Read);

byte[] bPhoto= new byte[fs.Length];
fs.Read(bPhoto, 0, System.Convert.ToInt32(fs.Length));
fs.Close();

sqlDataAdapter1.Fill(ds);

DataRow oneRow = ds.Tables[0].NewRow();
oneRow["customerID"] = 1234;
oneRow["photo"] = bPhoto;
ds.Tables[0].Rows.Add(oneRow);

sqlDataAdapter1.Update(ds);

Console.WriteLine("图片入库成功!");
}

[此贴子已经被作者于2006-12-2 13:31:19编辑过]

搜索更多相关主题的帖子: SQL Server 数据库 using System 
2006-12-02 13:29
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
得分:0 
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}

飘过~~
2006-12-02 13:51
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
得分:0 
不行,用Message不够ToString好,原因是……

你自己想吧。

2006-12-02 13:52
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
得分:0 
好的,谢了。

飘过~~
2006-12-02 13:57
jacklee
Rank: 7Rank: 7Rank: 7
来 自:XAplus
等 级:贵宾
威 望:32
帖 子:1769
专家分:104
注 册:2006-11-3
得分:0 
TOSTRING和EX.MESSAGE各有用处,
TOSTRING返回错误代码行什么的,很清楚错在哪里,如果是客户用时还见到这种不气死?当然在调试开发过程中用这个是明智的选择!
MESSAGE返回错误名称,可以用对话框形式向用户“光明正大”的显示错误。。

XAplus!
讨论群:51090447
删吧删吧,把我的号给删了!
2006-12-04 08:31
yelang7
Rank: 1
等 级:新手上路
威 望:1
帖 子:265
专家分:0
注 册:2006-11-3
得分:0 
恩,好的,谢谢版主的帮忙的咯.\
谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢!

想象和行动一致,做最棒的 IT 人. http://yelang7.
2006-12-04 11:27
立志成佛
Rank: 1
等 级:新手上路
威 望:2
帖 子:314
专家分:0
注 册:2006-11-1
得分:0 
用 ex.ToString() 方便哈

用 Message 麻烦

曾经的曾经已不在
2006-12-04 12:17
jacklee
Rank: 7Rank: 7Rank: 7
来 自:XAplus
等 级:贵宾
威 望:32
帖 子:1769
专家分:104
注 册:2006-11-3
得分:0 
如果产品是成品用EX.TOSTRING(),有时如果弹出一个异常(当然成品弹出异常是很眇小的,但也不能排除没有)客户还看到第几行什么***.TOINT32()...SENDMESSAGE(...)会一头雾水。感觉万分郁闷。不知道自己怎么了。

XAplus!
讨论群:51090447
删吧删吧,把我的号给删了!
2006-12-04 12:21
leona
Rank: 1
等 级:新手上路
帖 子:94
专家分:0
注 册:2006-11-20
得分:0 
太好了正好用的上!!
2006-12-04 13:34
IT浪子
Rank: 4
来 自:Nyist
等 级:贵宾
威 望:13
帖 子:402
专家分:20
注 册:2006-11-24
得分:0 
以前真的没有考虑这些问题,学习了

你不能让所有人都满意,因为不是所有人都是人!
2006-12-04 18:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-106766-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.023456 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved