• [转]C#操作varbinary(MAX)字段


    如果把照片直接保存在SQL Server数据库中,微软推荐用varbinary(MAX)字段。下面的代码演示了用C#操作varbinary(MAX)字段的基本方法。

    1、新增记录

            private void btnBrowse_Click(object sender, EventArgs e)//浏览照片
            {
                OpenFileDialog dlg = new OpenFileDialog();
                dlg.Filter = "*.jpg(jpg文件)|*.jpg|*.gif|*.gif";
                dlg.FilterIndex = 1;
                if (dlg.ShowDialog()==DialogResult.OK)
                {
                    textBox3.Text = dlg.FileName;
                    pictureBox1.Image = Image.FromFile(dlg.FileName);
                }
            }

        //新增记录

                using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["db"].ConnectionString))
                {
                    String sql = "insert into emp(name,age,photo) values(@name,@age,@photo)";
                    SqlCommand cmd = new SqlCommand(sql, conn);
                    cmd.Parameters.AddWithValue("@name", textBox1.Text);
                    cmd.Parameters.AddWithValue("@age", Convert.ToInt32(textBox2.Text));
                    //byte[] b;
                    //using(FileStream fs=new FileStream(textBox3.Text,FileMode.Open,FileAccess.Read))
                    //{
                    //    b = new byte[fs.Length];
                    //    fs.Read(b, 0, (int)fs.Length);
                    //}
                    byte[] b;
                    if (textBox3.Text != "")
                    {
                        b = File.ReadAllBytes(textBox3.Text);
                        cmd.Parameters.AddWithValue("@photo", b);
                    }
                    else
                    {
                        cmd.Parameters.AddWithValue("@photo", System.Data.SqlTypes.SqlBinary.Null);
                    }
                    conn.Open();
                    try
                    {
                        cmd.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {

                        MessageBox.Show(ex.Message);
                    }

                }

    2、显示记录信息并提供修改功能

            private void FormDetail_Load(object sender, EventArgs e)//显示记录详细信息
            {
                using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["db"].ConnectionString))
                {
                    String sql = "select * from emp where id=@id";
                    SqlCommand cmd = new SqlCommand(sql, conn);
                    cmd.Parameters.AddWithValue("@id", id);
                    conn.Open();
                    using (SqlDataReader dr = cmd.ExecuteReader())
                    {
                        if(dr.Read())
                        {
                            textBox1.Text = dr[1].ToString();
                            textBox2.Text = dr[2].ToString();
                            if (!dr.IsDBNull(3))//防止照片字段为空
                            {
                                System.Data.SqlTypes.SqlBytes bytes = dr.GetSqlBytes(3);
                                pictureBox1.Image=Image.FromStream(bytes.Stream);//显示照片
                            }
                        }
                    }
                }
            }

            private void btnSave_Click(object sender, EventArgs e)//更新记录
            {
                using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["db"].ConnectionString))
                {
                    byte[] b;
                    if (textBox3.Text != "")//需要更新照片
                    {
                        String sql = "update emp set name=@name,age=@age,photo=@photo where id=@id";
                        SqlCommand cmd = new SqlCommand(sql, conn);
                        cmd.Parameters.AddWithValue("@name", textBox1.Text);
                        cmd.Parameters.AddWithValue("@age", Convert.ToInt32(textBox2.Text));
                        cmd.Parameters.AddWithValue("@id", id);
                        b = File.ReadAllBytes(textBox3.Text);
                        cmd.Parameters.AddWithValue("@photo", b);
                        conn.Open();
                        try
                        {
                            cmd.ExecuteNonQuery();
                        }
                        catch (Exception ex)
                        {

                            MessageBox.Show(ex.Message);
                        }
                    }
                    else//不需要更新照片
                    {
                        String sql = "update emp set name=@name,age=@age where id=@id";
                        SqlCommand cmd = new SqlCommand(sql, conn);
                        cmd.Parameters.AddWithValue("@name", textBox1.Text);
                        cmd.Parameters.AddWithValue("@age", Convert.ToInt32(textBox2.Text));
                        cmd.Parameters.AddWithValue("@id", id);
                        conn.Open();
                        try
                        {
                            cmd.ExecuteNonQuery();
                        }
                        catch (Exception ex)
                        {

                            MessageBox.Show(ex.Message);
                        }
                    }               
                }
            }

  • 相关阅读:
    循环语句格式
    使用switch编写一个购物管理系统
    浅谈Spark(1)
    Java内存回收优化及配置
    同步、异步、阻塞、非阻塞IO
    安装聊天软件telegram-cli
    linux命令行下使用vboxmanage安装linux系统
    昨天晚上写了个 Python 程序,下载了一个图片网站 5000 来张图片
    git使用代理clone加速
    smtp发送邮件记得结尾发送" . "
  • 原文地址:https://www.cnblogs.com/wpfworld/p/2911068.html
Copyright © 2020-2023  润新知