public partial class Form1: Form {
#region 多次用到成员变量.
private DataSet set = new DataSet(); //存储Adapter读取的数据集.
private SqlDataAdapter adapter;
private string strConnction = @"Data Source=.\SQLExpress;Initial Catalog=DB_User;Persist Security Info=True;User ID=sa;Password=**********";
#endregion public Form1() {
InitializeComponent();
}
//选择用户头像.
private void btnSelectImg_Click(object sender, EventArgs e) {
openFD.Filter = "(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*";//图像过滤.
if(openFD.ShowDialog() == DialogResult.OK) picBox.Image = Image.FromFile(openFD.FileName);
}
//添加用户方法.
bool AddUser(string strName, string strPicture) {
using(SqlConnection connect = new SqlConnection(strConnction)) {
using(FileStream fs = new FileStream(strPicture, FileMode.Open, FileAccess.Read)) {
using(BinaryReader bReader = new BinaryReader(fs)) { //二进制读取图像.
byte[] bytes = bReader.ReadBytes((int)fs.Length);
SqlCommand cmd = connect.CreateCommand();
cmd.CommandText = "insert into [dbo].[T_User](FName,FPhoto) values(@name,@photo)";
cmd.Parameters.Clear(); //清空先前参数变量.
cmd.Parameters.Add("@name", SqlDbType.NVarChar, 50).Value = txtUserName.Text;
cmd.Parameters.Add("@photo", SqlDbType.Image).Value = bytes;
adapter = new SqlDataAdapter(cmd);
adapter.Fill(set, "T_User"); //填充T_User表.
}
}
}
return true;
}
//添加新用户.
private void btnAddUser_Click(object sender, EventArgs e) {
if(!string.IsNullOrEmpty(txtUserName.Text) && picBox.Image != null) {
if(AddUser(txtUserName.Text.Trim(), openFD.FileName)) {
MessageBox.Show("用户添加成功");
}
else
MessageBox.Show("用户添加失败");
}
}
//显示用户信息.
void ShowUser() {
using(SqlConnection conect = new SqlConnection(strConnction)) {
SqlCommand cmd = conect.CreateCommand();
cmd.CommandText = "select [FName] as 姓名,[FPhoto] as 头像 from [dbo].[T_User]";
adapter = new SqlDataAdapter(cmd);
adapter.Fill(set, "T_User");
dataGV.DataSource = set.Tables["T_User"]; //指定数据源.
}
}
//初始时加载用户.
private void Form1_Load(object sender, EventArgs e) {
ShowUser();
}
}/*以上是我看了一个例子之后写的,按照他的思路,写的很顺...但是我突然想到之前写Web的时候,用户的图片之类的,数据库只是保存了图片的路径,而不是以二进制存储在上面DataSet中,所以我感觉我这个做的,是不是真的没有意义.图片占的内存很大.用户肯定不会是一两个...大家觉得呢...*/
#region 多次用到成员变量.
private DataSet set = new DataSet(); //存储Adapter读取的数据集.
private SqlDataAdapter adapter;
private string strConnction = @"Data Source=.\SQLExpress;Initial Catalog=DB_User;Persist Security Info=True;User ID=sa;Password=**********";
#endregion public Form1() {
InitializeComponent();
}
//选择用户头像.
private void btnSelectImg_Click(object sender, EventArgs e) {
openFD.Filter = "(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*";//图像过滤.
if(openFD.ShowDialog() == DialogResult.OK) picBox.Image = Image.FromFile(openFD.FileName);
}
//添加用户方法.
bool AddUser(string strName, string strPicture) {
using(SqlConnection connect = new SqlConnection(strConnction)) {
using(FileStream fs = new FileStream(strPicture, FileMode.Open, FileAccess.Read)) {
using(BinaryReader bReader = new BinaryReader(fs)) { //二进制读取图像.
byte[] bytes = bReader.ReadBytes((int)fs.Length);
SqlCommand cmd = connect.CreateCommand();
cmd.CommandText = "insert into [dbo].[T_User](FName,FPhoto) values(@name,@photo)";
cmd.Parameters.Clear(); //清空先前参数变量.
cmd.Parameters.Add("@name", SqlDbType.NVarChar, 50).Value = txtUserName.Text;
cmd.Parameters.Add("@photo", SqlDbType.Image).Value = bytes;
adapter = new SqlDataAdapter(cmd);
adapter.Fill(set, "T_User"); //填充T_User表.
}
}
}
return true;
}
//添加新用户.
private void btnAddUser_Click(object sender, EventArgs e) {
if(!string.IsNullOrEmpty(txtUserName.Text) && picBox.Image != null) {
if(AddUser(txtUserName.Text.Trim(), openFD.FileName)) {
MessageBox.Show("用户添加成功");
}
else
MessageBox.Show("用户添加失败");
}
}
//显示用户信息.
void ShowUser() {
using(SqlConnection conect = new SqlConnection(strConnction)) {
SqlCommand cmd = conect.CreateCommand();
cmd.CommandText = "select [FName] as 姓名,[FPhoto] as 头像 from [dbo].[T_User]";
adapter = new SqlDataAdapter(cmd);
adapter.Fill(set, "T_User");
dataGV.DataSource = set.Tables["T_User"]; //指定数据源.
}
}
//初始时加载用户.
private void Form1_Load(object sender, EventArgs e) {
ShowUser();
}
}/*以上是我看了一个例子之后写的,按照他的思路,写的很顺...但是我突然想到之前写Web的时候,用户的图片之类的,数据库只是保存了图片的路径,而不是以二进制存储在上面DataSet中,所以我感觉我这个做的,是不是真的没有意义.图片占的内存很大.用户肯定不会是一两个...大家觉得呢...*/
或者我觉得可以把图片路径保存到数据库中 读取图片路径打开图片 前提是你本机要有这些图片 所以可能没有2楼版主的方法好
貌似,在web中就正显现了...按照9 楼的说法,我觉得也是可以从这方向去想,可能像头像之类,或比如身份头像,放在数据库中是可以考虑的.但是就安全性来说,我觉得图片很多是很占内存...
倒是文件系统,会给硬盘io带来压力,效率绝对低得多
如果是大网站肯定有自己放图片的服务器头像肯定放上头了哈
例如csdn
头像是<img alt="jiaoshiyao" class="avatar" src="http://avatar.profile.csdn.net/B/9/9/1_jiaoshiyao.jpg">
而论坛的域名则是
http://bbs.csdn.net/