在数据库中存储字节时出错,不允许从数据类型varchar到varbinary(max)的隐式转换

时间:2013-12-03 19:51:41

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

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)

1 个答案:

答案 0 :(得分: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();