SQL Server 2008将varchar转换为varbinary

时间:2014-08-18 12:41:37

标签: sql-server type-conversion varbinary

我尝试将图像数据导入到sql server 2008 db中,代码如下:

INSERT INTO [TAB] (ID_PHOTO,PHOTO)
VALUES(
    CAST('333EFB54-7062-E043-F088-FE0A916C0297' as uniqueidentifier),
    CONVERT(varbinary(max),'0xFFD8FFE000')
)

字符串只是一个虚拟字符,但是当我插入数据时,我在数据库中找到了类似的内容

0x307846464438464645303030

这与我的预期完全不同。有人知道我做错了吗?

3 个答案:

答案 0 :(得分:2)

此处的问题只是字符串 - constructor(private route: ActivatedRoute) { console.log(this.route.snapshot.params); console.log(this.route.snapshot.queryParams); } - 正在转换为'0xFFD8FFE000',因此每个字符 - 首先是VARBINARY,然后是0,那么x,依此类推 - "转换"十六进制表示:

F

因此,Character -- Hex value 0 30 x 78 F 46 F 46 D 44 8 38 F 46 F 46 E 45 0 30 0 30 0 30 被视为一串字符,就像"这是一个测试"而不是一个字节序列。

幸运的是,修复非常简单:只需添加"样式" 0xFFD8FFE000的可选第3个参数的1值:

CONVERT

答案 1 :(得分:1)

你所看到的是正确的。您应该能够运行以下内容以查看它们的转换是否正确发生(基本上,将数据库中的varbinary值转换回VARCHAR):

SELECT CONVERT(varbinary(max),'0xFFD8FFE000')
SELECT CONVERT(varchar(100), 0x307846464438464645303030)

OR

SELECT CONVERT(varchar(100), CONVERT(varbinary(max),'0xFFD8FFE000'))

请注意varbinary值周围缺少单引号 - SQL Server中不需要

答案 2 :(得分:0)

我想用图片将数据插入sql DB,为此我已将sql中的数据类型设置为varbinary,但出现错误

  

System.Data.SqlClient.SqlException:'从数据隐式转换   不允许将varchar类型更改为varbinary(max)。

使用CONVERT函数运行此查询。” 考虑我的代码:

 private void InsertButton_Click(object sender, EventArgs e)
    {
        string grno = GRNoTextBox.Text;
        string rollno = RollNoTextBox.Text;
        string name = NameTextBox.Text;
        string fname = FatherNameTextBox.Text;
        string cno = ContactNoTextBox.Text;
        string clas = ClassComboBox.SelectedItem.ToString();
        string sec = SectionComboBox.SelectedItem.ToString();
        string picadd = ofg.FileName;

        conn.Open();
        string query = "insert into stdinfo values ('"+grno+ "','" + rollno + "','" + name + "','" + fname + "','" + clas + "','" + sec + "','" + cno + "','" + picadd + "')";
        SqlCommand cmd = new SqlCommand(query, conn);
        cmd.ExecuteNonQuery();
        conn.Close();

        MessageBox.Show("Student info inserted into database successfully");
    }