0

Wix のカスタム アクションに C# を使用していますが、これは正常に動作します。カスタム アクションは基本的に、メソッドに渡されたパラメーターに基づいて SQL スクリプトを実行するだけです。

私が実行しているスクリプトの 1 つは、テーブルの 1 つにデータを入力します (テーブルに何もない場合)。次のようになります。

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 クエリとして読み取ります。必要のない余分な手順が追加されるため、できる限り変更する必要はありません。

4

3 に答える 3

1

列のT-SQLには変換関数がありますuniqueidentifierこれで試してください:

INSERT [dbo].[Table] ([ItemId], [Description]) VALUES (CONVERT(uniqueidentifier,N'<<GUID>>'), N'The 2nd Item') 
于 2012-05-31T12:56:55.260 に答える
0

私は今問題を解決しました。スクリプトの 1 つが古く、そのテーブルの ID が から に変更されていることが判明nvarcharしましたuniqueidentifier

その後、2 つのことが起こりました。1 つ目は、そのテーブルのデフォルト データを入力するスクリプトを誰も更新しなかったことです。2つ目は、wix(またはSQLを実行しているカスタムアクション、正確にはわかりません)が最初のスクリプトの後にエラーを報告していたことです。これはたまたま非常によく似たテーブル構造を持っています。

要するに、問題が何であるかをもっと早く発見するべきだったのです。代わりに、そうしなかったためにSAで自分をばかにしてしまいました。とにかく答えてくれてありがとう、うまくいけば、この質問に出くわした人に役立つでしょう。

于 2012-05-31T13:36:13.767 に答える
0

興味深い問題です。ひょっとして、Visual Studio 2008 を使用していませんか? 使用しているドライバーが古い可能性があります。

于 2012-05-31T13:18:57.567 に答える