【问题标题】:Reading binary data from SQL Server CE in C#在 C# 中从 SQL Server CE 读取二进制数据
【发布时间】:2015-01-08 00:07:07
【问题描述】:

我正在尝试从 SQL Server CE 数据库文件中读取二进制数据。

我尝试使用此代码:

string fileName = "C:\\Users\\Luca\\Desktop\\TestNoah\\TestNoah\\NOAHDatabaseCoreSqlCompact.sdf";
connectionString = string.Format("DataSource='{0}'; Persist Security Info=False", fileName);

using (SqlCeConnection con = new SqlCeConnection(connectionString))
{
    con.Open();

    using (SqlCeCommand command = new SqlCeCommand("SELECT PublicData FROM Action",con))
    {
        byte[] barrImg = (byte[])command.ExecuteScalar();

        List<byte> test = barrImg.ToList<byte>();
        string strfn = Convert.ToString(DateTime.Now.ToFileTime());

        FileStream fs = new FileStream("C:\\Users\\Luca\\Desktop\\TestNoah\\TestNoah\\" + strfn + ".jpg" , FileMode.CreateNew, FileAccess.Write);
        fs.Write(barrImg, 0, barrImg.Length);

        fs.Flush();
        fs.Close();
    }
}

此代码创建了一个我无法打开的图像。有任何想法吗?谢谢大家

【问题讨论】:

  • 这将为所有行返回PublicData。不存在只选择一行的条件吗?或者你可以试试SELECT TOP 1

标签: c# binary sql-server-ce


【解决方案1】:

下面的代码使用ExecuteReader 而不是ExecuteScalar(除非您期望结果集中只有一个返回值,而您的SqlCeCommand 的WHERE 受主键限制,或者您有@ 987654324@ 在您的SELECT 中。

string targetDir = "C:\\Users\\Luca\\Desktop\\TestNoah\\TestNoah\\";
var reader = command.ExecuteReader();
while (reader.Read())
{
    byte[] img = (byte[])reader["PublicData"];
    string path = System.IO.Path.Combine(targetDir, string.Format("{0}.jpg", DateTime.Now.ToFileTime()));
    System.IO.File.WriteAllBytes(path, img);
}

如果您仍有图像损坏问题,我希望这将是您的源数据记录。

【讨论】:

  • 0 反对票 接受 谢谢您的回复。不幸的是,我的图像仍然存在损坏问题。源数据记录是软件备份程序的结果。这是正确的,因为当我在软件上导入备份时,它会恢复所有数据。
  • 不,我不是...数据库 (sdf) 是备份过程的结果,我不知道它使用哪种文件格式
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多