4

「文字列からuniqueidentifierへの変換で変換に失敗しました。」と出ます。

VB 側で文字列を使用し、データベース側で GUID を使用しています.....

Sqlサーバーの「uniqueidentifier」データ型でうまく機能する、VB側で使用できる同等のフィールドはありますか

4

1 に答える 1

1

すでに値を文字列として持っていて、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.

于 2013-10-31T14:51:25.780 に答える