c# - 尝试将字节数组插入数据库时​​从 varchar 隐式转换为 varbinary 错误

标签 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.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 保存文件,将每个字节的字节保存到新的字节数组中,但我总是遇到此错误。

有谁知道,如何解决?

附言我想将文件保存到数据库中,而不仅仅是文件的 URL,所以我需要保存字节 []。 P.S.2 将其他类型插入数据库工作

感谢任何建议:)

已解决:

我已经解决了:

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

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

一切都会完美无缺!

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

最佳答案

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

关于c# - 尝试将字节数组插入数据库时​​从 varchar 隐式转换为 varbinary 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12638883/

相关文章:

c# - 我应该在 Windows 服务器中的什么位置设置 TLS 安全协议(protocol)?

sql - TSQL - 如何格式化查询结果?

sql - 在 sql 中没有任何 while 循环的情况下从列中删除前导零

SQL - 另一个 Select 语句的 Where 子句?

c# - ServiceStack 自动查询 - 如何忽略类中的属性

c# - 发送多封带有交易行为的电子邮件(如果一封失败,则不会发送任何电子邮件)

c# - 如何在 WPF 后端正确使用 .NET 数据注释进行数据验证?

c# - 一个或多个实体的 MVC5 验证失败。有关详细信息,请参阅 'EntityValidationErrors' 属性

asp.net-mvc - 使用 ASP.NET MVC 站点和 ServiceStack API 进行身份验证

c# - 找不到 ServiceStack RequestContext