尝试将字节数组插入数据库时​​,从varchar到varbinary错误的隐式转换

时间:2012-09-28 11:10:47

标签: c# sql-server servicestack ormlite-servicestack

我想将File保存到我的数据库中,因此我将其解析为byte []:

byte[] f = File.ReadAllBytes(@"E:\Path\To\My\File\MyFile.foo");

创建表的类:

public class Files
{
    [AutoIncrement]
    public int Id { get; set; }

    public byte[] File { get; set; }
}

接下来,在我的服务中,我想将我的文件插入db:

db.Insert(new Files() { File = f }); // db is object to database

之后我在网站上收到错误:

Implicit conversion from data type varchar(max) to varbinary(max) is not allowed. Use the CONVERT function to run this query.

我不知道如何改变它。我试图通过MemoryStream,FileStream保存File,将每个字节的字节保存到新的字节数组中,我总是得到这个错误。

有人知道,如何解决?

P.S。我希望不将文件保存到DB而不仅仅是文件的URL,所以我需要保存byte []。 P.S.2将其他类型插入数据库工作

感谢您的任何建议:)

解决:

我已经解决了它:

如果您想将blob放入数据库使用:

IDbCommand cmd = db.CreateInsertStatement(new Files() { File = f });
cmd.ExecuteNonQuery();

一切都会完美无缺!

当然,如果有人知道如何使用“插入”方法将Blob放到DB中 - 写下来。我仍然不知道正确的答案。

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。您的解决方案有效,但更多的是解决方案。我向ServiceStack.OrmLite提交了一个pull request来修复SQL Server的问题。