sql2005 image字段如何添加照片
展开全部
C#读取Image数据类型:
(1)控制台应用程序下演示插入图片
public void InsertIMG()
{
//将需要存储的图片读取为数据流
FileStream fs = new FileStream(@"E:\c.jpg", FileMode.Open,FileAccess.Read);
Byte[] btye2 = new byte[fs.Length];
fs.Read(btye2 , 0, Convert.ToInt32(fs.Length));
fs.Close();
using (SqlConnection conn = new SqlConnection(sqlconnstr))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "insert into T_Img(imgfile) values(@imgfile)";
SqlParameter par = new SqlParameter("@imgfile", SqlDbType.Image);
par.Value = bt;
cmd.Parameters.Add(par);
int t=(int)(cmd.ExecuteNonQuery());
if (t > 0)
{
Console.WriteLine("插入成功");
}
conn.Close();
}
}
(2)控制台应用程序下读出并生成图片到物理位置
public void Read()
{
byte[] MyData = new byte[0];
using (SqlConnection conn = new SqlConnection(sqlconnstr))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "select * from T_img";
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
MyData = (byte[])sdr["ImgFile"];//读取第一个图片的位流
int ArraySize= MyData.GetUpperBound(0);//获得数据库中存储的位流数组的维度上限,用作读取流的上限
FileStream fs = new FileStream(@"c:\00.jpg", FileMode.OpenOrCreate, FileAccess.Write);
fs.Write(MyData, 0, ArraySize);
fs.Close(); //-- 写入到c:\00.jpg。
conn.Close();
Console.WriteLine("读取成功");//查看硬盘上的文件
}
}
(3)Web下picshow.aspx页将图片读取出来并写入到浏览器上呈现
public void Read()
{
byte[] MyData = new byte[0];
using (SqlConnection conn = new SqlConnection(sqlconnstr))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "select * from T_img";
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
MyData = (byte[])sdr["ImgFile"];
Response.ContentType = "image/gif";
Response.BinaryWrite(MyData);
conn.Close();
Response.Write("读取成功");
}
(4)在web中可以如上picshow.aspx页面读取并显示图片,而真正引用该图片时如下示例
<img src="picshow.aspx" width="500" height="300" />
(5)Winform下将图片写入到sql数据库image类型字段中的方法和以上方法基本一致,仅区别于可以利用多个对话框来帮助选取存储图片等,各个属性可以方便的利用上
(6)Winform下读取图片在picturebox控件中显示出来
方法一:利用MemoryStream 和System.Drawing.Image
public void Read()
{
byte[] MyData = new byte[0];
using (SqlConnection conn = new SqlConnection(sqlconnstr))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "select * from T_img";
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
MyData = (byte[])sdr["ImgFile"];
MemoryStream mystream = new MemoryStream(MyData);
//用指定的数据流来创建一个image图片
System.Drawing.Image img = System.Drawing.Image.FromStream(mystream, true);
System.Windows.Forms.PictureBox picbox = new PictureBox();
picbox.Image = img;
picbox.Left = 30;
picbox.Top = 80;
picbox.Width = 800;
picbox.Height = 500;
this.Controls.Add(picbox);
mystream.Close();
conn.Close();
}
}
方法二:将流直接读取成图片并写入到物理位置,然后再行利用该图片呈现
void Read()
{
using (SqlConnection conn = new SqlConnection(sqlconnstr))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "select * from T_img";
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
byte[] Image_img = (byte[])sdr["ImgFile"];
if (Image_img.Length == 0)
{
return;
}
int filelength = Image_img.Length;
string imageName = "1.jpg";
string myUrl = Environment.CurrentDirectory + "\\" + imageName;
FileStream fs = new FileStream(myUrl, FileMode.OpenOrCreate,FileAccess.Write);
BinaryWriter BW = new BinaryWriter(fs);
BW.BaseStream.Write(Image_img, 0, filelength);
BW.Flush();
BW.Close();
System.Windows.Forms.PictureBox picbox = new PictureBox();
//为picbox添加图片方法一
//picbox.ImageLocation = myUrl;
//picbox.Width = 800;
//picbox.Height = 300;
//为picbox添加图片方法二
Bitmap bitmap = new Bitmap(myUrl);
picbox.Width = 100;//bitmap.Width;
picbox.Height = 80;//bitmap.Height;
picbox.Image = (Image)bitmap;
picbox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
picbox.Left = 20;
picbox.Top = 30;
this.Controls.Add(picbox);
conn.Close();
}
}
展开全部
1、MS SQL Server系列,数据库的 表的 字段 类型 的确有Image,但是,MS SQL Server自带的管理工具(早先的“企业管理器”、后来的“SQL Server Management Studio”)都没有处理图象存取及展示的功能,所以,无法直接用MS SQL Server自带的组件来进行图象数据的存取。
2、不过,这对MS SQL Server的功能的影响并不大,因为在实际中,MS SQL Server自带的组件一般仅仅用于调试和开发,如何将图像数据存入MS SQL Server中,是程序设计人员要考虑的问题。
3、以下代码展示了如何向ACCESS数据库写入图片数据(向MS SQL写入的原理是一样的,只需要改动服务器的联接字串即可):
//-----------------------------------------------------------------
bool ACCWritePIC(AnsiString ACCDataName,AnsiString ACCTableName,AnsiString ACCFieldeName,\
int FS,TImage *ImageMe,int RorW)
{
AnsiString ConnSStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\\" + ACCDataName + ";Persist Security Info=False" ;
AnsiString AStrSql = "select * from " + ACCTableName;
TADOQuery* ADOQryUseDB=new TADOQuery(Application);
ADOQryUseDB->ConnectionString = ConnSStr;
ADOQryUseDB->SQL->Add(AStrSql);
ADOQryUseDB->Active = true;
try{
if(RorW == 0){
if(FS == 1){
if(!ADOQryUseDB->Eof){
ADOQryUseDB->Edit();
}else{
ADOQryUseDB->Append();
};
}else{
ADOQryUseDB->Append();//FS为0时追加
};
ADOQryUseDB->FieldByName(ACCFieldeName)->Clear();
TBlobField *Field = (TBlobField*)ADOQryUseDB->FieldByName(ACCFieldeName);
Field->Assign(ImageMe->Picture);
ADOQryUseDB->Post();
}else{
TStream *Stream1;
Graphics::TBitmap * pBitmap=new Graphics::TBitmap();
Stream1 = ADOQryUseDB->CreateBlobStream(ADOQryUseDB->FieldByName(ACCFieldeName),bmRead);
pBitmap->LoadFromStream(Stream1);
ImageMe->Picture->Assign(pBitmap);
}
ADOQryUseDB->Active = false;
delete ADOQryUseDB;
return true;
}catch (...) {return false;};
}
//-----------------------------------------------------------------
4、不同的编程环境下的具体代码不同,但原理基本一样。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把照片的路径添加进去就是了~~~~~
假设 table1 表里面有两个字段,stuID 和stuImage
插入数据就 insert into table1 values('20091041', '图片的绝对路径')
不能添加数据 就换这个 insert into table1 values('20091041', '图片的相对路径')
假设 table1 表里面有两个字段,stuID 和stuImage
插入数据就 insert into table1 values('20091041', '图片的绝对路径')
不能添加数据 就换这个 insert into table1 values('20091041', '图片的相对路径')
更多追问追答
追问
不是路径添加,而是转成二进制储存
追答
额 ~~~~~~~~呵呵,表示不知道了~~~~~~~~
不过 sql类型有image类型,直接存储image类型,干啥要转为二进制存储呢?~~
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询