如何用C#将图片上到Access
最近自己做紧个校友录~~~
但有个地方不会就是将图片上到Access的并且可以通过按钮来读取显示~~~
并可以在listbox控件显示所有的图片~~~在listbox控件中点击图片名就会显示图片~~~要WinForm的~~不要ASP~~
最近自己做紧个校友录~~~
但有个地方不会就是将图片上到Access的并且可以通过按钮来读取显示~~~
并可以在listbox控件显示所有的图片~~~在listbox控件中点击图片名就会显示图片~~~要WinForm的~~不要ASP~~
解决方案 »
- 怎么将数据集DATASET一此性插入一个表
- 重载“gcm”方法未获取“0”参数??谢谢
- [疑问].net frame可以安装两个不通的版本吗?
- 为什么大家认为接口比抽象类好??
- 请问使用RadioButtonList时不设默认值,当不选择其中任何属性时,是什么状态?
- 怎样读取.nist文件的头信息,并获得头信息里面的比特率什么的
- c# 打开外部程序
- winform中如何在一panel中显示一幅图片呢?
- 怎样在DataGrid控件里面使用DropDownList控件
- 最新内幕消息!!! MS将会在2002年推出C$ !!! 聪明的程序员现在就开始学C$吧, 已免到时又落后啦!
- statusStrip 控件使用
- 关于接口问题的疑问,请达人相助1
使用时可以这样:
比如字段名为 ImageFile,那么代码可以这样写:
//...
string imageFileName = dataTable.Rows[0]["ImageFile"].ToString();
Image img = Image.FromFile(imageFileName);
pbImage.Image = img;
//...pbImage是一个PictureBox控件
在ListBox里单击显示图片可以这样做:
你将所有图片设置成一样大小的,然后动态放到一个ImageList控件中:代码如下:
int index = 0;
lvwHeader.Items.Clear();
imgLstHeader.Images.Clear();
List<string> fileNameList = FileDirectoryOper.GetImageFileNames(Application.StartupPath + @"\pictures");
foreach (string fileName in fileNameList)
{
Image image = Image.FromFile(fileName);
imgLstHeader.Images.Add(image);
string file = FileDirectory.FileDirectoryOper.GetFileName(fileName);
ListViewItem item = new ListViewItem(file);
item.ImageIndex = index;
lvwHeader.Items.Add(item);
index++;
}
这里使用的是ListView,不过道理是一样的,用文件名做列项名,将ListBox的ImageList属性设置成代码中的ImageList项,这样就能在ListBox里显示图片了。
using System;
using System.IO;
using System.Data;
using System.Data.OleDb;
class BLOBDemo
{
[STAThread]
static void Main(string[] args)
{
Add("Test","2.jpg");
}
public static void Add(string categoryName, string filePath)
{
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
byte [] photo = br.ReadBytes((int)fs.Length);
br.Close();
fs.Close();
OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=northwind.mdb");
OleDbCommand cmd = new OleDbCommand("INSERT INTO 类别(类别名称, 图片) VALUES (@CategoryName, @Picture)", cn);
cmd.Parameters.Add("@CategoryName", OleDbType.VarChar,15).Value = categoryName;
cmd.Parameters.Add("@Picture", OleDbType.Binary, photo.Length).Value = photo;
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}
}
//从Access数据库northwind.mdb取出长二进制数据
using System;
using System.IO;
using System.Data;
using System.Data.OleDb;
class BLOBDemo
{
[STAThread]
static void Main(string[] args)
{
OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=northwind.mdb");
OleDbCommand cmd = new OleDbCommand("Select 类别ID,图片 FROM 类别 where 类别名称='Test'", cn);
FileStream fs;
BinaryWriter bw;
//缓冲区大小
const int bufferSize = 100;
byte [] outByte = new byte[bufferSize];
//GetBytes返回的字节数量
long retval = 0;
//BLOB输出的起始位置
long startIndex = 0;
string id = "";
cn.Open();
OleDbDataReader dr = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
while(dr.Read())
{
id = dr.GetValue(0).ToString();
fs = new FileStream(id + ".bmp", FileMode.OpenOrCreate, FileAccess.Write);
bw = new BinaryWriter(fs);
startIndex = 0;
retval = dr.GetBytes(1, startIndex, outByte, 0, bufferSize);
while(retval == bufferSize)
{
bw.Write(outByte);
bw.Flush();
startIndex += bufferSize;
retval = dr.GetBytes(1, startIndex, outByte, 0, bufferSize);
}
bw.Write(outByte, 0, (int)retval - 1);
bw.Flush();
bw.Close();
fs.Close();
}
dr.Close();
cn.Close();
}
}
我比较蠢~~还是不理解
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
byte [] photo = br.ReadBytes((int)fs.Length); fs = new FileStream(id + ".bmp", FileMode.OpenOrCreate, FileAccess.Write);
bw = new BinaryWriter(fs);
startIndex = 0;
retval = dr.GetBytes(1, startIndex, outByte, 0, bufferSize);