2013-10-31 42 views
4

我得到“从字符串转换为uniqueidentifier时转换失败。”VB.Net中的错误 - 从字符串转换为uniqueidentifier时转换失败

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

是否有一个等效场,我可以在VB端使用,可以用“唯一标识符很好地工作在SQL Server中的“数据类型

+0

可能的重复:http://stackoverflow.com/q/13428960/261997 – RThomas

+1

'uniqueidentifier'是'GUID'。 除此之外,不要连接你的查询,但使用sql参数来防止转换或本地化错误,更重要的是防止sql注入。 –

+0

如何在表列是GUID时处理空字符串parmList.Add(String.Empty)? – User1

回答

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仁济ction攻击,但这是另一回事。至少有了这个答案,你知道如何将字符串转换为uniqueidentifier

+0

下仍然给了我同样的错误:INSERT INTO aic_obs_set_obs_set_obs_item_xref(GUID,ParentObsSetGUID,ChildObsSetGUID,ChildObsItemGUID) VALUES(CONVERT(唯一标识符, 'a1771622-6cd6-49f7-8b26-6befafaf556e'), CONVERT(唯一标识符,“4746da06- e830-42a0-9761-ce60a62ea4d1' ), \t \t CONVERT(唯一标识符, '633ce901-1d4d-479c-b295-232fe7b53295'), \t \t CONVERT(唯一标识符, '')) – User1

+0

尝试此更新。我只是调整了两次;-) –

相关问题