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中,所以我感觉我这个做的,是不是真的没有意义.图片占的内存很大.用户肯定不会是一两个...大家觉得呢...*/

解决方案 »

  1.   

    2楼caozhy版主说的很对 
    或者我觉得可以把图片路径保存到数据库中 读取图片路径打开图片 前提是你本机要有这些图片 所以可能没有2楼版主的方法好
      

  2.   

    没有看你的代码。我觉得也不重要。这个东西的出发点,如果让我看来,不管你用什么保存,都要抛开它(假设它只是一个url资源引用而已)而从整体去考虑。例如你是否需要将这类资源统一地移植到别的服务器上?你是否需要要求其下载机制支持http 304状态?等等。当你有更多东西可以考虑,当你考虑持续发布、持续重构架构的工程技术,你就放弃了一些暂时的纠结。根据开发的人来安排技术,而不是根据技术来安排开发的人。
      

  3.   

    你是winform 就存到数据库里吧。
      

  4.   


    貌似,在web中就正显现了...按照9 楼的说法,我觉得也是可以从这方向去想,可能像头像之类,或比如身份头像,放在数据库中是可以考虑的.但是就安全性来说,我觉得图片很多是很占内存...
      

  5.   

    槽点不对,转换都是在内存中完成,还真没什么压力,
    倒是文件系统,会给硬盘io带来压力,效率绝对低得多
    如果是大网站肯定有自己放图片的服务器头像肯定放上头了哈
    例如csdn
    头像是<img alt="jiaoshiyao" class="avatar" src="http://avatar.profile.csdn.net/B/9/9/1_jiaoshiyao.jpg">
    而论坛的域名则是
    http://bbs.csdn.net/