自学内容网 自学内容网

C# 访问Access存取图片

图片存入ole字段,看有的代码是获取图片的字节数组转换为base64字符串,存入数据库;显示图片是把base64字符串转换为字节数组再显示;直接存字节数组可能还好一点;

插入的时候用带参数的sql写法比较好;用拼接sql一般会出错;

测试表有三个字段,加载一个图片然后插入记录;

插入以后如下;第5、6条是对的,3、4没插对;如果要png、jpeg、gif等格式都支持,写为 image1.Save(ms, image1.RawFormat);

 

读取并显示如下;

 

插入记录的代码,

            Image image1;
            MemoryStream ms = new MemoryStream();
            byte[] arr1 = null; ;

            if (pictureBox1.Image != null)
            {
                image1.Save(ms, image1.RawFormat);
                arr1 = new byte[ms.Length];
                ms.Position = 0;
                ms.Read(arr1, 0, (int)ms.Length);

                //pic1 = Convert.ToBase64String(arr1);
            }
            ms.Close();

            if (button1.Text == "添加")
            {
                if (textBox1.Text == "")
                {
                    MessageBox.Show("名字不能为空!", "添加信息");
                    return;
                }
                else
                {
                    string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + Environment.CurrentDirectory + "\\mytest.mdb'";
                    string query = "INSERT INTO testpic (a1, a2, ppp) VALUES (?,?,?)";
 
                    using (OleDbConnection conn = new OleDbConnection(connectionString))
                    {
                        using (OleDbCommand cmd = new OleDbCommand(query, conn))
                        {
                            // 这里设置参数值,注意索引对应你SQL语句中参数的位置
                            cmd.Parameters.AddWithValue("?", textBox1.Text);
                            cmd.Parameters.AddWithValue("?", textBox2.Text);
                            cmd.Parameters.AddWithValue("?", arr1);
 
                            conn.Open();
                            int rowsAffected = cmd.ExecuteNonQuery();

                            conn.Close();
                        }
                    }

                    textBox1.Text = "";
                    textBox2.Text = "";
                }
            }

读取显示图片的代码,

private void button2_Click(object sender, EventArgs e)
        {
            string sql1 = "select * from testpic where id = " + 6;
            byte[] buff = null;
            buff = achelp.GetBufferFromDB(sql1, "ppp");

            System.IO.MemoryStream picbuf = new System.IO.MemoryStream(buff);
            Image image = Image.FromStream(picbuf, true);
            picbuf.Close();

            pictureBox1.Image = image;
        }

        ......

        //返回图片byte[]
        public byte[] GetBufferFromDB(string strSql, string fieldname)
        {
            byte[] buff = null;

            if (conn_str == null)
            {
                return null;
            }

            try
            {
                ole_connection.Open();//打开连接

                if (ole_connection.State == ConnectionState.Closed)
                {
                    return null;
                }

                ole_command.CommandText = strSql;
                ole_command.Connection = ole_connection;

                ole_reader = ole_command.ExecuteReader(CommandBehavior.Default);

                if (ole_reader.Read())
                {
                    buff = (byte[])ole_reader[fieldname];
                }

                ole_reader.Close();
                ole_reader.Dispose();
            }
            catch (System.Exception e)
            {
                //Console.WriteLine(e.ToString());
                MessageBox.Show(e.Message);
            }
            finally
            {
                if (ole_connection.State != ConnectionState.Closed)
                {
                    ole_connection.Close();
                }
            }

            return buff;
        }

要先执行ole_reader.Read(),然后才能取ole_reader[fieldname];
 


原文地址:https://blog.csdn.net/bcbobo21cn/article/details/142373095

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!