从WinForms C#app上传/下载SQL Server 2005/2008中的文件?

Mad*_*Boy 7 c# sql-server-2005 sql-server-2008 winforms c#-3.0

我正在使用DocX来创建.docx文件.而不是将它们存储在硬盘驱动器上,Share或SharePoint我宁愿将它们存储在SQL数据库中.所以我的问题是:

  1. 如何编写适当的代码将文件保存到该数据库?
  2. 如何编写适当的代码来将文件检索到该数据库?
  3. 我应该为表设置什么样的数据类型来保存docx文件?是影像吗?

带着敬意,

疯狂的男孩

PS.在使用旧的"学校"方式时,我更喜欢使用正确的代码:

using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDepozyt))
using (var sqlQuery = new SqlCommand(preparedCommand, varConnection))
using (var sqlQueryResult = sqlQuery.ExecuteReader())
    while (sqlQueryResult != null && sqlQueryResult.Read())
Run Code Online (Sandbox Code Playgroud)

Asa*_*sad 7

docx文件就像一个zip文件,它是几个文件的集合.如何转换为二进制,然后保存到数据库

以下内容将起作用

要保存

        string filePath = "";
        string connectionString = "";
        FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
        BinaryReader reader = new BinaryReader(stream);
        byte[] file = reader.ReadBytes((int)stream.Length);
        reader.Close();
        stream.Close();

        SqlCommand command;
        SqlConnection connection = new SqlConnection(connectionString);
        command = new SqlCommand("INSERT INTO FileTable (File) Values(@File)", connection);
        command.Parameters.Add("@File", SqlDbType.Binary, file.Length).Value = file;
        connection.Open();
        command.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

检索是一个有点复杂的过程如下

            SqlConnection connection = new SqlConnection("");
            string query = 
            @" SELECT File FROM FileTable where FileID =" + 125;
            SqlCommand command = new SqlCommand(query, connection);

            FileStream stream;
            BinaryWriter writer;

            int bufferSize = 100;
            byte[] outByte = new byte[bufferSize];

            long retval;
            long startIndex = 0;

            string pubID = "";

            connection.Open();
            SqlDataReader reader = command.ExecuteReader(CommandBehavior.Default);

            while (reader.Read())
            {    
                pubID = reader.GetString(0);

                stream = 
                new FileStream("abc.docx", FileMode.OpenOrCreate, FileAccess.Write);
                writer = new BinaryWriter(stream);
                startIndex = 0;
                retval = reader.GetBytes(1, startIndex, outByte, 0, bufferSize);

                while (retval == bufferSize)
                {
                    writer.Write(outByte);
                    writer.Flush();
                    startIndex += bufferSize;
                    retval = reader.GetBytes(1, startIndex, outByte, 0, bufferSize);
                }
                writer.Write(outByte, 0, (int)retval - 1);
                writer.Flush();
                writer.Close();
                stream.Close();
            } reader.Close();
            connection.Close();
Run Code Online (Sandbox Code Playgroud)

请查看以下文章以获取帮助和详细信息

保存:

Retreival: