我想从我的数据库导出一些数据并创建一个Insert语句,用C#将这些数据插入到另一个数据库中。
我制作了几乎所有东西(和-type)的脚本,但是当我尝试在我的一个表格中使用它时,它有一个名为Contentos
的字段type VARBINARY(max)
我可以&# 39;让它发挥作用。
现在我必须选择那些数据,我通过使用将System.Binary[]
(我在读取列时得到的)转换为十六进制字符串的方法来实现。
但不幸的是,我在插入数据时失败了......
我正在尝试这样的事情:
INSERT INTO [My.Cool.DBA].[dbo].[Documentos] ([Id], [SomeID], [Name], [Contentos], [LastChange], [LastChangeId]) VALUES ('693c9644-f2b5-4c74-a633-f4942fc1d8e5', 'bca2ac27-71e0-4641-a4b0-3c3e39916e71', 'Whats that', [--> here goes the content <--], '07.08.15 11:18:34:383', '693c9344-f8b5-4d74-a633-f4942fc1d8e5');
内容(例如):
&#39; 504B03041400000008091043E288E9E0D9EC7C1CEB6CF6A7E9290D5A4B04179E2A1B8FE350341542EA67DCCD96DC5E682FD14E7A61E70000002A0300000000&#39;
结果:无法将varchar类型隐式转换为varbinary(max)。使用CONVERT函数
好的,让我们来做吧! 内容(例如):
CONVERT(varbinary(max),&#39; 504B03041400000008091043E288E9E0D9EC7C1CEB6CF6A7E9290D5A4B04179E2A1B8FE350341542EA67DCCD96DC5E682FD14E7A61E70000002A0300000000&#39;)
结果:
转换为
uniqueidentifier
时出错。
架构是这样的:
无论我做什么,这都不会奏效。
所以我想知道如何
sb.Append(String.Format("'{0}'", ByteArrayToHexViaLookup32((Byte[])reader[j])));
非常感谢提前!!!
[编辑]
这是最终对我有用的事情:
string.Format("CONVERT(VARBINARY(max), 0x{0})", ByteArrayToHexConverter.ByteArrayToHexViaLookup32((byte[])value));
ByteArrayToHexConverter
没有什么特别的,只需将Bytearray转换为Hex(正如名称所示:b)
此外,我不得不让服务器将其从十六进制字符串转换回原来的byte[]
注意:我需要这个能够从文本文件中执行生成的语句。所以如果你没有这个要求,我建议你看一下 Thomas Levesque的答案
您应该使用参数化查询:
INSERT INTO [My.Cool.DBA]。[dbo]。[Documentos]([Id],[SomeID],[Name], [Contentos],[LastChange],[LastChangeId])VALUES(@Id,@ SomeId, @ Name,@ Conostos,@ LastChange,@ LastChangeId);
答案 0 :(得分:1)
您应该使用参数化查询:
INSERT INTO [My.Cool.DBA].[dbo].[Documentos] ([Id], [SomeID], [Name], [Contentos], [LastChange], [LastChangeId])
VALUES (@Id, @SomeId, @Name, @Contentos, @LastChange, @LastChangeId);
使用SqlCommand
上的Add
或AddWithValue
方法将参数添加到command.Parameters
。
使用参数化查询有多个优点:
SQL Server中BLOB文字的格式为0x<hex-value>
(无引号)。因此,在您的情况下,它将是0x504B03041400000008091043E288E9E0D9EC7C1CEB6CF6A7E9290D5A4B04179E2A1B8FE350341542EA67DCCD96DC5E682FD14E7A61E70000002A0300000000
。