VB.Net 中的错误 -- 当将一个字符串转换为唯一标识符(uniqueidentifier)时,转换失败。

4

当从字符字符串转换为唯一标识符时,我收到了“转换失败”的消息。

我在VB端使用字符串,在数据库端使用GUID.....

在VB端是否有等效的字段可用,可以很好地与Sql Server中的“uniqueidentifier”数据类型配合使用?


可能是重复问题:http://stackoverflow.com/q/13428960/261997 - RThomas
1
一个 uniqueidentifier 是一个 GUID。除此之外,不要连接你的查询,而是使用 SQL 参数来防止转换或本地化错误,更重要的是防止 SQL 注入。 - Tim Schmelter
当表列为GUID时,如何处理空字符串parmList.Add(String.Empty)? - Utpal Mattoo
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)

如果您希望将 NULL 插入 GUID 列中,则需要将您的代码的最后一位更改为以下内容:
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


以下代码仍然给我相同的错误提示:INSERT INTO aic_obs_set_obs_set_obs_item_xref (GUID, ParentObsSetGUID, ChildObsSetGUID, ChildObsItemGUID) VALUES (CONVERT(uniqueidentifier, 'a1771622-6cd6-49f7-8b26-6befafaf556e'), CONVERT(uniqueidentifier, '4746da06-e830-42a0-9761-ce60a62ea4d1'), CONVERT(uniqueidentifier, '633ce901-1d4d-479c-b295-232fe7b53295'), CONVERT(uniqueidentifier, '')) - Utpal Mattoo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接