解决方案 »

  1.   

    如果你用C#,你可以对FileStream做Base64后以文本的形式存入数据库。再解码后写入FileStream的方式还原。
      

  2.   

    是存入SQLITE的TEXT类型吗? 给个简单的实例吧!比如把AAA.rar存入和取取要怎么做呢?对FileStream,Base64,完全不懂啊!
      

  3.   

    Base64的方法不可取,转换成文本既费时间又费空间,还是直接存byte[]比较好。
    找了一下,以前试验的代码还在:using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing.Imaging;
    using System.Data.SQLite;namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                using (SQLiteConnection conn = new SQLiteConnection("Data Source=t.db3"))
                {
                    conn.Open();
                    using (SQLiteCommand cmd = new SQLiteCommand(
                        "INSERT INTO IMGS (ID , IMAGE) VALUES ( @id_value, @image_value)", conn))
                    {
                        using (Image png = Image.FromFile("0.jpg"))
                        {
                            using (System.IO.MemoryStream strm = new System.IO.MemoryStream())
                            {
                                png.Save(strm, ImageFormat.Jpeg);
                                cmd.Parameters.Add(new SQLiteParameter("id_value", 1));
                                cmd.Parameters.Add(new SQLiteParameter("image_value", strm.ToArray()));
                                cmd.ExecuteNonQuery();
                            }
                        }
                    }
                }
            }        private void Form1_Load(object sender, EventArgs e)
            {
                using (SQLiteConnection conn = new SQLiteConnection("Data Source=t.db3"))
                {
                    conn.Open();
                    using (SQLiteCommand cmd = new SQLiteCommand(
                        "CREATE TABLE IMGS (ID, IMAGE, PRIMARY KEY(ID))", conn))
                    {
                        cmd.ExecuteNonQuery();
                    }
                }        }        private void button2_Click(object sender, EventArgs e)
            {
                using (SQLiteConnection conn = new SQLiteConnection("Data Source=t.db3"))
                {
                    conn.Open();
                    using (SQLiteCommand cmd = new SQLiteCommand(
                        "SELECT IMAGE FROM IMGS WHERE ID = 1", conn))
                    {
                        byte[] data = (byte[])cmd.ExecuteScalar();
                        using (System.IO.MemoryStream strm = new System.IO.MemoryStream(data))
                        {
                            Image img = Image.FromStream(strm);
                            pictureBox1.Image = img;
                        }
                    }
                }
            }
        }
    }
      

  4.   

    谢谢!这个里面的IMAGE存入数据库,sqlite是不是要用BLOB类型存呢?如果要存EXE或者RAR等其它文件,要怎么改呢?上面的TEXT版的测试成功,这里分享一下!using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;namespace FileToSql
    {
        public partial class FileToSql : Form
        {
            public FileToSql()
            {
                InitializeComponent();
            }
            Sqlite_helper SQL_hp = new Sqlite_helper();        private string buffer;
            private void base64Encode(string fromFile)
            {
                FileStream fileStream = File.Open(fromFile, FileMode.Open);
                byte[] buffer = new byte[fileStream.Length];
                fileStream.Read(buffer, 0, buffer.Length);
                fileStream.Close();
                this.buffer = Convert.ToBase64String(buffer);
            }        private void base64Decode(string toFile , string buf)
            {
                FileStream fileStream = new FileStream(toFile, FileMode.Create);
                byte[] buffer = Convert.FromBase64String(buf);
                fileStream.Write(buffer, 0, buffer.Length);
                fileStream.Close();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                this.base64Encode("D://AAA.exe");
                SQL_hp.Sql_Execute("insert into FileToSql (ID,Name,File) values(3,'EXE','" + buffer + "')");
                textBox1.Text = buffer;
            }        private void button2_Click(object sender, EventArgs e)
            {
                this.base64Decode("D://aa//AAA.exe", SQL_hp.Sql_Row("select * from FileToSql WHERE ID = 3")[2].ToString());
            }    }
    }
      

  5.   

    从数据存取出的JPG,EXE,RAR,要怎么写到D盘里呢?
      

  6.   

    存到磁盘的话(在上面的读取代码中得到data之后:using ( System.IO.FileStream file = new System.IO.FileStream(@"d:\doc\a.jpg", System.IO.FileMode.Create))
    {
        file.Write(data, 0, data.Length);
    }
    二进制文件存入数据库都用Blob类型。不过SQLite中的字段是无类型的,存入什么类型就是什么类型。注意我上面创建表的语句:CREATE TABLE IMGS ( ID, IMAGE, PRIMARY KEY(ID))这在其它数据库中是无法执行的。
    当然在SQLite中同样也可以写成:CREATE TABLE IMGS(ID NUMERIC, IMAGE BLOB, PRIMARY KEY(ID))SQLite同样支持。事实上我现在都是这么写,因为已经习惯了。
      

  7.   

    存取JPG图片成功了,请问怎么向数据库存EXE,RAR呢?
      

  8.   


    CREATE TABLE IMGS(ID NUMERIC, IMAGE BLOB, PRIMARY KEY(ID))这个建表语句,如果数据库里己经有表了,就不用建了???我在代码里直接注释掉,应该没有问题吧!
      

  9.   


                using (SQLiteConnection conn = new SQLiteConnection("Data Source=t.db3"))
                {
                    conn.Open();
                    using (SQLiteCommand cmd = new SQLiteCommand(
                        "INSERT INTO IMGS (ID , IMAGE) VALUES ( @id_value, @image_value)", conn))
                    {
                        //using (Image png = Image.FromFile("0.jpg"))
                        //{
                        //    using (System.IO.MemoryStream strm = new System.IO.MemoryStream())
                        //    {
                                FileStream fileStream = File.Open("D://AA.exe", FileMode.Open);
                                byte[] buffer = new byte[fileStream.Length];
                                fileStream.Read(buffer, 0, buffer.Length);
                                fileStream.Close();
                                //png.Save(strm, ImageFormat.Jpeg);
                                cmd.Parameters.Add(new SQLiteParameter("id_value", 4));
                                cmd.Parameters.Add(new SQLiteParameter("image_value", buffer.ToArray()));
                                cmd.ExecuteNonQuery();
                        //    }
                        //}
                    }
                }
     谢谢,不好意思,对这些流转来转去还是第一次接触,乱搞搞出来了代码如上,应该没有错了!