Я использую C# для пользовательского действия в wix, который отлично работает. Пользовательское действие по существу просто запускает sql-скрипты на основе параметров, переданных методу.SqlException брошен за неправильное преобразование
Один из сценариев я бегу населяет один из моих таблиц с данными, если нет ничего в нем, и выглядит примерно так:
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
- эти сценарии были созданы из экспорта данных SQL Server 2008 R2 с использованием соответствующей редакции Management Studio.
Когда я запускаю этот скрипт в Management Studio, он работает нормально и, как и ожидалось, все данные вставляются, если их уже нет. Запуск его с помощью кода C#, однако, и я получаю следующее исключение:
Conversion failed when converting from a character string to uniqueidentifier
В качестве единственного uniqueidentifier
столбца в таблице, это должен быть столбец ItemId, но я не могу понять, почему это происходит, или как решить проблему, и последний часовой поиск в Интернете тоже ничего не дал.
EDIT
Я хотел бы добавить, что эти запросы SQL находятся в файле, которую # код C затем считывает содержимое в качестве запроса SQL. Я действительно не хочу изменять их, если я могу помочь, поскольку он добавляет дополнительный шаг, который не нужен.
Не могли бы вы проверить, что фактически передано в БД через инструмент Profiler? Пожалуйста, вставьте его, чтобы мы могли исследовать еще немного. – Dave
Вам нужно проверить, какие значения входят в переменную, которая используется для хранения данных GUID в коде C#. Соответствует ли этой переменной правильное значение? и проверка того же значения передается в запрос через параметр в sql. –