功能介绍:
通常,在我们开发时时,如何需要将文件保存到数据库中,我们会将该字段设置成IMAGE格式,即以二进制的形式保存。
这就存在一个问题,以二进制形式保存后的数据库,在导出或者备份数据时,无法将该字段导出成SQL语句。
下面介绍的是将任何文件转化成串的形式保存到数据库中,然后就可以将将数据库中的数据导出到XML等格式了。
你可以从些处下载源码: 将文件转成字符串并保存到数据库中
数据库结构:
CREATE TABLE [dbo].[t_Test] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[filename] [nvarchar] (250) COLLATE Chinese_PRC_CI_AS NULL ,
[FileStream] [image] NULL ,
[FileString] [ntext] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
一、将文件保存到数据库
//将图片存入字节数组中
System.IO.FileStream MyFs1 = new System.IO.FileStream(this.textBox1.Text, System.IO.FileMode.Open, System.IO.FileAccess.Read);
byte[] MyData = new byte[MyFs1.Length];
MyFs1.Read(MyData, 0, System.Convert.ToInt32(MyFs1.Length));
MyFs1.Close();
Model_t_Test model = new Model_t_Test();
model.filename =System.IO.Path.GetFileName( this.textBox1.Text);
model.FileStream = MyData;
// byte[] buf = MyData.ToArray();
string ssss = Convert.ToBase64String(MyData);
model.FileString = ssss;
DAL_t_test dal = new DAL_t_test();
int re= dal.Add(model);
if(re>0)
{
MessageBox.Show("添加记录成功");
}
else
{
MessageBox.Show("添加记录成功");
}
}
二、将数据库中IMAGE字段的文件转化成文件
int r= this.dataGridView1.CurrentRow.Index;
string ID = this.dataGridView1.Rows[r].Cells[0].Value.ToString();
DAL_t_test dal=new DAL_t_test();
Model_t_Test model = dal.GetModel(int.Parse(ID));
System.IO.MemoryStream ms = new System.IO.MemoryStream(model.FileStream);
if (ms.Length <= 0)
{
MessageBox.Show("没有文档!!!");
return;
}
//将内存流保存到文件流
if (System.IO.File.Exists(model.filename ) == true)
{
System.IO.File.Delete(model.filename);
}
System.IO.FileStream aa = new System.IO.FileStream(model.filename, System.IO.FileMode.OpenOrCreate);
ms.WriteTo(aa);// '将内存流写入到文件流中
aa.Close();
MessageBox.Show("导出文件成功");
ms = null;
//打开WORD文档
System.Diagnostics.Process MyPro = new System.Diagnostics.Process();
MyPro.StartInfo.FileName = model.filename;
MyPro.StartInfo.Verb = "Open";
MyPro.Start();
三、将Ntext字段的内容转化成文件
int r = this.dataGridView1.CurrentRow.Index;
string ID = this.dataGridView1.Rows[r].Cells[0].Value.ToString();
DAL_t_test dal = new DAL_t_test();
Model_t_Test model = dal.GetModel(int.Parse(ID));
byte[] MyData = DbHelperSQL.strToByte(model.FileString);
System.IO.MemoryStream ms = new System.IO.MemoryStream(MyData);
if (MyData.Length <= 0)
{
MessageBox.Show("没有文档!!!");
return;
}
//将内存流保存到文件流
if (System.IO.File.Exists(model.filename) == true)
{
System.IO.File.Delete(model.filename);
}
System.IO.FileStream aa = new System.IO.FileStream(model.filename, System.IO.FileMode.OpenOrCreate);
ms.WriteTo(aa);// '将内存流写入到文件流中
aa.Close();
MessageBox.Show("导出文件成功");
ms = null;
//打开WORD文档
System.Diagnostics.Process MyPro = new System.Diagnostics.Process();
MyPro.StartInfo.FileName = model.filename;//导出到当前目录下
MyPro.StartInfo.Verb = "Open";
MyPro.Start();
四、将数据库导出成XML文件
private void btnSqveToXML_Click(object sender, EventArgs e)
{
if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
{
DAL_t_test dal = new DAL_t_test();
DataTable dt = dal.GetALLList("").Tables[0];
dt.WriteXml(this.saveFileDialog1.FileName );
MessageBox.Show("导出文件成功");
}
}