「文字列からuniqueidentifierへの変換で変換に失敗しました。」と出ます。
VB 側で文字列を使用し、データベース側で GUID を使用しています.....
Sqlサーバーの「uniqueidentifier」データ型でうまく機能する、VB側で使用できる同等のフィールドはありますか
「文字列からuniqueidentifierへの変換で変換に失敗しました。」と出ます。
VB 側で文字列を使用し、データベース側で GUID を使用しています.....
Sqlサーバーの「uniqueidentifier」データ型でうまく機能する、VB側で使用できる同等のフィールドはありますか
すでに値を文字列として持っていて、SQL を手で書いている場合は、次のCONVERT
ようにすることができます。
strSql.Append("INSERT INTO tableName ")
strSql.Append("(GUID, ParentObsSetGUID, ChildObsSetGUID, ChildObsItemGUID) ")
strSql.Append(String.Format("VALUES (CONVERT(uniqueidentifier, '{0}'), CONVERT(uniqueidentifier, '{1}'), CONVERT(uniqueidentifier, '{2}'), CONVERT(uniqueidentifier, '{3}'))", parmList.ToArray))
編集:空の文字列があり、新しい Guid が必要な場合は、次のようにします。
parmList.Add(Guid.NewGuid().ToString())
それ以外の
parmList.Add(String.Empty)
GUID 列にa を挿入する場合NULL
は、コードの最後のビットを次のように変更する必要があります。
parmList.Add(dtNewGUID.Rows(0).Item(0).ToString)
parmList.Add(dtResultParentGUID.Rows(0).Item(0).ToString)
parmList.Add(dtResultChildGUID.Rows(0).Item(0).ToString)
// remove the line with the empty string parameter
strSql.Append("INSERT INTO tableName ")
strSql.Append("(GUID, ParentObsSetGUID, ChildObsSetGUID, ChildObsItemGUID) ")
strSql.Append(String.Format("VALUES (CONVERT(uniqueidentifier, '{0}'), CONVERT(uniqueidentifier, '{1}'),
CONVERT(uniqueidentifier, '{2}'), NULL)", parmList.ToArray))
// Note the change to the last line. '{3}' becomes NULL.
// Make sure you remove the single quotes
注:そのままのコード (およびこの回答) は、SQL インジェクション攻撃に対して脆弱ですが、それは別の問題です。少なくともこの回答では、文字列をuniqueidentifier
.