【问题标题】:How can I retrieve binary data from sql with c#?如何使用 c# 从 sql 中检索二进制数据?
【发布时间】:2009-08-27 10:23:42
【问题描述】:

我检索了保存在文件流列中的数据作为示例 下面的代码,并将其放入内存流或字节数组中。我怎样才能打开它 用它的默认值?

OS 应用程序,例如使用照片管理器或 word 文档打开照片 微软字?通常我使用 Process.Start 命令 但它不适用于 内存流或字节数组,那么如何做到这一点?

 public DataTable RetriveFile(int Code)
        {
            mydbms d = new mydbms();
            DataTable dt;


           String com2 = "select * from Matn_Naame where Code=" + Code + ";";
           dt = d.executeselectsql(com2);


            return dt;
        }
{
Letter_Manager L_M = new Letter_Manager();
            Byte[] b;
            DataTable dt = new DataTable();
            dt = L_M.RetriveFile(6);

            b=(Byte[])dt.Rows[0]["fileContent"];
            path = dt.Rows[0]["Path"].ToString();

                 MemoryStream Memory = new MemoryStream(b);
                 Memory.Write(b, 0, b.Length);
//??????????????????**?for open and show file**
}

【问题讨论】:

    标签: c#


    【解决方案1】:

    您需要将数据保存到临时文件中。调用System.IO.Path.GetTempFileName() 可以获得临时文件名。然后,您可以简单地使用 FileStream 保存到该路径,正如您所提到的,Process.Start 启动默认应用程序。

    【讨论】:

    • 请帮助我有代码:FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); Path.GetTempFileName(); fs.Write(b, 0, b.Length); fs.Flush(); fs.关闭();如果 Process.Start(fs.Name),我现在不支持 fs?但它以不从 sql 退出的相同路径启动应用程序
    • 但它以相同的路径开始文件,而不是从 sql 读取字节
    • 这是一个非常有用的答案。我什至不知道这种方法的存在。谢谢!
    • @Mary:你应该分配path = Path.GetTempFileName();,然后使用Process.Start(path)
    • @Mary:如果你现在一切正常,你介意接受这个答案吗?
    【解决方案2】:

    最简单的方法是使用方便的File.WriteAllBytes 方法,将字节数组直接写入指定的文件名。

    var fileName = Path.ChangeExtension(Path.GetTempFileName(), "txt");
    File.WriteAllBytes(fileName, b);
    Process.Start(fileName);
    

    请注意,在我的示例中,我假设您正在处理希望使用默认文本编辑器打开的纯文本数据。

    Windows 将不知道启动该文件的应用程序,除非您给它一个有意义的扩展名。您要么必须预先知道数据的格式,以便可以附加正确的扩展名,要么您需要使用可以猜测数据类型的库,例如出色的 TrID 文件识别工具。

    【讨论】:

    • thanx 回答,但是当运行此代码时,一个带有 tmp 扩展创建的临时文件并发生错误:没有应用程序与此操作的指定文件关联,请帮助我thanx
    • 查看我对文件扩展名的回答的修正。
    • 我的扩展文件是 txt 或 doc 或 docx,我将扩展文件附加到 tempfile?
    • 我已更改代码,使临时文件扩展名为“txt”。您仍然需要一些方法来确定您是在处理纯文本还是 MS Word 文档。
    • 非常感谢您的帮助 Thanxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多