求rar , exe , jpg 等各种东西存SQLITE 数据库的完整代码! sqlite 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果你用C#,你可以对FileStream做Base64后以文本的形式存入数据库。再解码后写入FileStream的方式还原。 是存入SQLITE的TEXT类型吗? 给个简单的实例吧!比如把AAA.rar存入和取取要怎么做呢?对FileStream,Base64,完全不懂啊! 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; } } } } }} 谢谢!这个里面的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()); } }} 从数据存取出的JPG,EXE,RAR,要怎么写到D盘里呢? 存到磁盘的话(在上面的读取代码中得到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同样支持。事实上我现在都是这么写,因为已经习惯了。 存取JPG图片成功了,请问怎么向数据库存EXE,RAR呢? CREATE TABLE IMGS(ID NUMERIC, IMAGE BLOB, PRIMARY KEY(ID))这个建表语句,如果数据库里己经有表了,就不用建了???我在代码里直接注释掉,应该没有问题吧! 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(); // } //} } } 谢谢,不好意思,对这些流转来转去还是第一次接触,乱搞搞出来了代码如上,应该没有错了! DateSet 记录分组排序并过滤的问题 .net ajax网站本地运行正常 上传到服务器后 ajax不起作用 343928439*394293 分成2个数字! 将unicode转换为ASCII码之后,中文就变成了?? 写一个简单的方法,请指点一下 c#里实现曲线的截取? sharepoint 中建立一个更改用户密码的WebPart。急!!!非常急的!!! 如何用这种格式算出一个月前的日期? Combox的问题 C#多线程画图 如何多次更新textbox的值并显示? C#的DatagridView控件在数据量过大时加载过慢
找了一下,以前试验的代码还在: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;
}
}
}
}
}
}
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());
} }
}
{
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同样支持。事实上我现在都是这么写,因为已经习惯了。
CREATE TABLE IMGS(ID NUMERIC, IMAGE BLOB, PRIMARY KEY(ID))这个建表语句,如果数据库里己经有表了,就不用建了???我在代码里直接注释掉,应该没有问题吧!
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();
// }
//}
}
}
谢谢,不好意思,对这些流转来转去还是第一次接触,乱搞搞出来了代码如上,应该没有错了!