【发布时间】:2012-05-31 12:47:03
【问题描述】:
我在 wix 中使用 C# 进行自定义操作,效果很好。自定义操作本质上只是根据传递给方法的参数运行 sql 脚本。
我正在运行的脚本之一用数据填充我的一个表,如果其中没有任何内容,并且看起来像这样:
IF (SELECT COUNT(*) FROM [dbo].[Table]) = 0
BEGIN
INSERT [dbo].[Table] ([ItemId], [Description]) VALUES (N'<<GUID>>', NULL)
INSERT [dbo].[Table] ([ItemId], [Description]) VALUES (N'<<GUID>>', N'The 2nd Item')
...
END
在这种情况下,<<GUID>> 类似于e00104e4-7e5f-4563-9356-30732d5ca57e - 这些脚本是使用相应版本的 Management Studio 从 SQL Server 2008 R2 的数据导出中生成的。
当我在 Management Studio 中运行此脚本时,它可以正常工作,并且如预期的那样,如果那里没有任何数据,则所有数据都会被插入。但是,通过 C# 代码运行它,我得到以下异常:
Conversion failed when converting from a character string to uniqueidentifier
作为表中唯一的 uniqueidentifier 列,这必须是 ItemId 列,但我无法弄清楚为什么会发生这种情况,或者如何解决问题,最后一小时在线搜索没有给任何东西。
编辑
我应该补充一点,这些 SQL 查询位于一个文件中,然后 C# 代码将其内容作为 SQL 查询读取。如果可以的话,我真的不想修改它们,因为它增加了一个不需要的额外步骤。
【问题讨论】:
-
您能检查一下通过 Profiler 工具实际传递给数据库的内容吗?请粘贴它,以便我们进行更多调查
-
您需要检查变量中有哪些值,该变量用于在 C# 代码中存储 GUID 数据。该变量是否包含正确的值?并检查是否通过 sql 中的参数将相同的值传递到查询中。
标签: c# sql-server wix ssms