【问题标题】:Differences between Convert in SQL and Convert in C#SQL 中的 Convert 和 C# 中的 Convert 之间的区别
【发布时间】:2014-09-19 09:55:19
【问题描述】:

我有一个连接到 SQL Server 数据库的 C# 项目,我正在为文件上传进行格式识别。 更具体地说,我在 varbinary 中上传文件,并将它们存储在 Db 的列中。当我下载它们时,我想识别它们的格式。我在网上找到了一些热门关键字(或元数据),通过它们我可以识别它们是 docx 还是 xlsx 或其他。我的问题是,如果我在 SQL 上这样做:

select * from table where convert(varchar(8000),objectFile) like '%docprop%'`

它可以工作,db 只返回 word 文件。 但是,如果我想在使用 varbinary 之后在 C# 上执行此操作,我该怎么办? 我试过了,但没有用:

var item = context.tObject_M.SingleOrDefault(x => x.objectId == objectId);
var files = item.objectFile;
string filess = Convert.ToString(files);
byte[] itemi = item.objectFile;
string ciao = System.Text.Encoding.UTF8.GetString(itemi);
if (ciao.Contains("DOCPROPS"))
   {
      filess = "ciao";
    }

【问题讨论】:

  • var 项目返回什么?您想将 byte[] 转换为字符串?
  • var item 返回一个对象(数据库的一行)。我会以与数据库相同的方式将 byte[] 转换为字符串。
  • 当您将记录保存到数据库中时,只需创建新字段 ContentType,您将保存该字段中的内容。以后就不会出现这样的问题了!
  • 我知道,但是我想找到我上面写的方法,如果它存在的话
  • 看看我的回答,如果有什么不清楚的地方告诉我!

标签: c# sql-server sql-like varbinary


【解决方案1】:

http://www.garykessler.net/library/file_sigs.html

检查这个链接,你应该调查一下幻数。这是了解文件类型的唯一可靠方法。在您的情况下,您可以使用我在 cmets 中告诉您的内容类型!

如果搜索以 [03] [04] [00] 开头的序列

byte[] fileSign={0x03, 0x04, 0x00};

for(int i=0; i<fileSign.Length; i++)
{
   if(fileByteArray[i] != fileSign[i])
   {
       //not the same files
   }
}

【讨论】:

  • 感谢您的回答!但这并不能解决我的问题; Office 文件(xlsx、docx 等)的前 8 个数字具有相同的头文件!所以我为每种类型的文件找到了一些关键字;如果我把它们放在上面的查询中,它会给我正确的扩展名!这就是我要使用这种方法的原因!
  • @kirkfrusciante 你读过我发给你的关于 docx、xlsx 文件的链接吗? Microsoft Office Open XML 格式 (OOXML) 文档 注意:MS OOXML 文件没有与 DOC、PPT 和 XLS 文件一样的子标题。为了更好地理解这些文件的格式,请将任何 OOXML 文件重命名为具有 .ZIP 扩展名,然后解压缩文件;查看名为 [Content_Types].xml 的生成文件以查看内容类型。特别是,查找
  • 我昨天在研究期间读到了这篇文章;但是,正如我在上面写的那样,我找到了一个对我有帮助的子标题或类似的东西。但它只在 SQL 中对我有帮助。我不需要其他方法来达到我的目标;我想在我的方法上取得成功,我重复这个问题:我怎样才能以相同的结果复制上面用 C# 编写的 SQL 中的查询?感谢您的关注!
  • 我不知道 C# 中有这个功能!
猜你喜欢
  • 1970-01-01
  • 2020-12-29
  • 1970-01-01
  • 2016-01-19
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多