【问题标题】:Error while storing bytes in database ,Implicit conversion from data type varchar to varbinary(max) is not allowed在数据库中存储字节时出错,不允许从数据类型 varchar 到 varbinary(max) 的隐式转换
【发布时间】:2013-12-03 19:51:41
【问题描述】:
public void InsertMails(string From, string To, string Date, string Content, string AttachmentPath, byte[] CCD)
{
   ClassLibrary.ConnectionClass.CurrentConnection.ExecuteNonReader("Insert into RecieveDirectMails([From],[To],Date,[Content],AttachmentPath,CreationDate,LastUpdatedDate,IsReviewed,LastUpdatedBy,IsDeleted,IsLocked,LockedBy,CCD) values ('" + From + "','" + To + "','" + Date + "','" + Content + "','" + AttachmentPath + "','" + DateTime.Now + "','" + DateTime.Now + "','" + "0" + "','" + "0" + "','" + "0" + "','" + "0" + "','" + "0" + "','" + CCD+ "')");
}

我正在将 XML 文件字节存储到数据库中,但发生了错误。

不允许从数据类型 varchar 到 varbinary(max) 的隐式转换。使用 CONVERT 函数运行此查询。

我在哪里做错了,任何人都可以帮助我。

在数据库中,CCD 列的数据类型为 varbinary(MAX)

【问题讨论】:

  • SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入
  • 数据库是 SQLSERVER 。
  • 简单的问题是为什么我会遇到此错误“不允许从数据类型 varchar 到 varbinary(max) 的隐式转换。使用 CONVERT 函数运行此查询。”
  • 好吧,您的列是 VARBINARY,因此它需要 binary data 顾名思义 - 但您提供的最后一个值是双引号 ("........") 所以因此它是一个字符串,不能自动转换。要么你有错误的数据类型,它真的应该是一个字符串格式(例如VARCHAR(MAX)),或者你需要提供数据作为数据的二进制blob,而不是作为@中的字符串987654328@声明
  • 是的,我认为你是对的,让我再试一次。

标签: c# sql-server visual-studio-2010


【解决方案1】:

T-SQL 中的二进制值由前缀为 0x 的十六进制编码文字表示,如下所示:

INSERT INTO Foo ( Col ) VALUES ( 0xDEADBEEF )

但是,如果您是从代码中执行此操作,请使用带有 SqlParameter 的参数化查询以避免注入攻击:

SqlCommand cmd = connection.CreateCommand();
cmd.CommandText = "INSERT INTO Foo ( Col ) VALUES ( @col )";
cmd.Parameters.Add("@col", SqlDbType.VarBinary).Value = new Byte[] { 0xDE, 0xAD, 0xBE, 0xEF };
cmd.ExecuteNonQuery();

【讨论】:

  • 这可以像我发布问题一样吗?意味着我想简单地将我的字节存储到数据库中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
相关资源
最近更新 更多