zoukankan      html  css  js  c++  java
  • 手把手教你怎样把文件保存到Oracle数据库

    最近给公司开发动态报表程序,通过报表设计器编辑好的模板首先以文件的形式保存,普遍的方法是把模板文件保存到硬盘的某个文件夹下面,然后数据库就保存该模板文件的存放路径即可,可以说这种方法经济实惠,但是要适应灵活多变的报表环境,尤其是可供他人共享别人已经编辑好的报表模板,这就成了问题,有没有更好的解决方案呢?那就是把模板存放到数据库里面,一切就OK了,下面给出具体的程序代码:

    第一步:在Oracle数据库新建一张表,SQL语句如下

    create table Test
    (
    ID Number primary key,
    TxtFile blob
    )

    最好通过PL/SQL工具执行SQL语句,建好这张测试表,下面就通过C#具体实现文件的存储了

    第二步:VS2008新建一个Windows应用程序,解决方案名:“保存文件到Oracle数据库”,项目名:“SaveFileToOracle”

    编写代码之前,首先引入必要的命名空间,本程序要另外引入两个命名空间:using System.Data.OracleClient;
    和using System.IO;

    先看一下截图:

    说明:窗体中央是一个RichTextBox控件,其他不用介绍了,下面是完整的程序代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Data.OracleClient;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;

    namespace 文件保存到数据库
    {
        public partial class Form1 : Form
        {
            private string connectionstring = @"server=CW;user id=ls0019999;password=aaaaaa;";
            public Form1()
            {
                InitializeComponent();
                this.button1.Click += new EventHandler(button1_Click);
                this.button2.Click += new EventHandler(button2_Click);
                this.button3.Click += new EventHandler(button3_Click);
                this.button4.Click += new EventHandler(button4_Click);
                this.button5.Click += new EventHandler(button5_Click);
                this.button6.Click += new EventHandler(button6_Click);
                this.button7.Click += new EventHandler(button7_Click);
            }

            void button7_Click(object sender, EventArgs e)
            {
                StringWriteDB(this.textBox1.Text.Trim());
            }

            void button6_Click(object sender, EventArgs e)
            {
                StringAndWrite(this.textBox1.Text.Trim(), this.textBox2.Text.Trim());

            }

            void button5_Click(object sender, EventArgs e)
            {
                StringAndRead(this.textBox1.Text.Trim());
            }

            void button1_Click(object sender, EventArgs e)
            {
                newFile();
            }

            void button4_Click(object sender, EventArgs e)
            {
                deleteFile(this.textBox1.Text.Trim());
            }

            void button3_Click(object sender, EventArgs e)
            {
                CreateNewFile();
            }

            void button2_Click(object sender, EventArgs e)
            {
                SaveFile(this.textBox2.Text.Trim());
            }
            private void SaveFile(string fileIndex)
            {
                FileStream fileStream = new FileStream(Application.StartupPath + "\\" + fileIndex, FileMode.Open, FileAccess.Read);
                BinaryReader filerd = new BinaryReader(fileStream, Encoding.Default);
                byte[] fileByte = new byte[fileStream.Length];
                filerd.Read(fileByte, 0, (int)fileStream.Length);
                OracleConnection con = new OracleConnection(connectionstring);
                try
                {
                    con.Open();
                    OracleCommand cmd = con.CreateCommand();
                    cmd.CommandText = "insert into test (ID,TXTFILE) values(:ID,:TXTFILE)";
                    cmd.Parameters.AddWithValue(":ID", this.textBox1.Text.Trim());
                    cmd.Parameters.AddWithValue(":TXTFILE", DBNull.Value);
                    cmd.Parameters[":TXTFILE"].Value = fileByte;
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("把文件写入数据库成功!");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("错误提示:" + ex.StackTrace);
                }

            }
            private void ReadFile()
            {
                OracleConnection con = new OracleConnection(connectionstring);
                try
                {
                    con.Open();
                    OracleCommand cmd = con.CreateCommand();
                    cmd.CommandText = "select * from test";
                    OracleDataAdapter da = new OracleDataAdapter(cmd);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                        {
                            byte[] fileByte = (byte[])ds.Tables[0].Rows[i]["TXTFILE"];
                            this.richTextBox1.AppendText(Encoding.Default.GetString(fileByte));
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("错误提示:" + ex.StackTrace);
                    MessageBox.Show("错误原因:" + ex.Message.ToString());
                }
            }
            private void CreateNewFile()
            {
                this.richTextBox1.Clear();
                using (OracleConnection con = new OracleConnection(connectionstring))
                {
                    con.Open();
                    OracleCommand cmd = con.CreateCommand();
                    cmd.CommandText = "select * from test";
                    OracleDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        byte[] fileByte = (byte[])reader.GetValue(1);
                        this.richTextBox1.AppendText("[" + reader.GetInt32(0).ToString() + "]" + ":" + Encoding.Default.GetString(fileByte));
                        this.richTextBox1.AppendText("\n");
                    }
                }
            }
            private void deleteFile(string index)
            {
                using (OracleConnection con = new OracleConnection(connectionstring))
                {
                    con.Open();
                    OracleCommand cmd = con.CreateCommand();
                    cmd.CommandText = "delete from test where ID=" + int.Parse(index);
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("删除成功!");
                }
            }
            private void newFile()
            {
                this.richTextBox1.Clear();
                using (OracleConnection con = new OracleConnection(connectionstring))
                {
                    con.Open();
                    OracleCommand cmd = con.CreateCommand();
                    cmd.CommandText = "select * from test";
                    OracleDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        byte[] fileByte = (byte[])reader.GetValue(1);
                        FileStream fileStream = new FileStream(Application.StartupPath + "\\" + "QQ.grf", FileMode.Create);
                        fileStream.Write(fileByte, 0, (int)fileStream.Length);
                        this.richTextBox1.AppendText("[" + reader.GetInt32(0).ToString() + "]" + ":" + Encoding.Default.GetString(fileByte));
                        this.richTextBox1.AppendText("\n");
                    }
                }
            }
            private void StringAndRead(string fileName)
            {
                //FileInfo myFile = new FileInfo(Application.StartupPath + "\\" + fileName);
                //StreamReader sr = myFile.OpenText();
                StreamReader sr = new StreamReader(Application.StartupPath + "\\" + fileName, Encoding.Default);
                MessageBox.Show(sr.CurrentEncoding.EncodingName);
                this.richTextBox1.Text = sr.ReadToEnd();
                sr.Close();
            }

            private void StringAndWrite(string fromName, string toName)
            {
                StreamReader sr = new StreamReader(Application.StartupPath + "\\" + fromName, Encoding.Default);
                StreamWriter sw = new StreamWriter(Application.StartupPath + "\\" + toName, true, Encoding.Default);
                sw.Write(sr.ReadToEnd());
                sr.Close();
                sw.Close();
            }
            private void StringWriteDB(string fileName)
            {
                this.richTextBox1.Clear();
                using (OracleConnection con = new OracleConnection(connectionstring))
                {
                    con.Open();
                    OracleCommand cmd = con.CreateCommand();
                    cmd.CommandText = "select * from test";
                    OracleDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        byte[] fileByte = (byte[])reader.GetValue(1);
                        StreamWriter sw = new StreamWriter(Application.StartupPath + "\\" + fileName, true, Encoding.Default);
                        sw.Write(fileByte);
                        sw.Close();
                        StreamReader sr = new StreamReader(Application.StartupPath + "\\" + fileName, Encoding.Default);
                        this.richTextBox1.Text = sr.ReadToEnd();
                        sr.Close();
                    }
                }
            }
        }
    }

    最后说明:本小程序Demo在VS2008集成环境下编译通过,最好能完整的自己去编写一边,另外补充一下“流”的概念,就可以很简单的实现文件保存数据库,以及怎样从数据库读和写文件,欢迎大家共同探讨,本人QQ:569339578

  • 相关阅读:
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    linux中的cd ..和cd -命令有什么区别?
    GCC使用
  • 原文地址:https://www.cnblogs.com/zwq194/p/1644157.html
Copyright © 2011-2022 走看看