首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Server 2005/2008从WinForms C#应用程序上传/下载文件?

从Server 2005/2008从WinForms C#应用程序上传/下载文件?
EN

Stack Overflow用户
提问于 2010-02-13 21:01:40
回答 2查看 16.8K关注 0票数 7

我正在使用DocX创建.docx文件。与其将它们存储在硬盘、共享或SharePoint上,我更愿意将它们存储在store中。所以我的问题是:

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

关于这一点,

MadBoy

PS。在使用旧的“学校”方式方面,我更倾向于使用适当的代码:

代码语言:javascript
复制
using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDepozyt))
using (var sqlQuery = new SqlCommand(preparedCommand, varConnection))
using (var sqlQueryResult = sqlQuery.ExecuteReader())
    while (sqlQueryResult != null && sqlQueryResult.Read())
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-13 21:16:25

docx文件就像一个zip文件,它是几个文件的集合。如何将其转换为二进制文件,然后保存为DB

下面的东西会起作用的

保存

代码语言:javascript
复制
        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();

检索的过程有点复杂,如下所示

代码语言:javascript
复制
            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();

有关帮助和详细信息,请参阅以下文章

储蓄

Retreival

票数 7
EN

Stack Overflow用户

发布于 2010-02-13 21:08:35

我知道它没有使用读取器,但是这里有一个示例来查询它并保存到磁盘中。把它放回原处,它只是一个插入或更新,传入一个byte[]。在sql中,数据类型将是varbinary。

代码语言:javascript
复制
SqlConnection connection = new SqlConnection ("...");
    connection.Open ();
    SqlCommand command = new 
      SqlCommand ("select...e", connection);
    byte[] buffer = (byte[]) command.ExecuteScalar ();
    connection.Close();
    FileStream fs = new FileStream(@"C:\test.pdf", FileMode.Create);
    fs.Write(buffer, 0, buffer.Length);
    fs.Close();

读者可能就像这样

代码语言:javascript
复制
while (myReader.Read())
        {
            byte[] file = myReader.GetBytes(0));
            // might be 
            file = (byte[])GetValue(0);
        }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2259037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档