将Guid值插入Sql Server(UniqueIdentifier列)时出错。 (内部说明)

时间:2013-05-20 12:23:16

标签: c# asp.net sql-server-2008

我的数据库中有一个表,其中2列其中uniqueidentifier不是null类型。我试图从asp.net c#在该表上插入一行,如下所示,

sqlCmd.CommandText = string.Format("Insert Into Member(MemberNo,MemberEmpId,...) values({0},{1},... )", MemNo, MemEmpNo, ...);

它引发了以下异常,

  

"浮点值 24e46222'超出计算机范围   表示(8个字节)。 ' a8c'附近的语法不正确。浮动   点值' 6664e7925'超出计算机代表范围   (8个字节)。"

我用Google搜索了这个错误,得到了一个reference,我尝试了但仍然给出了同样的错误。有人可以帮我解决这个问题。我找不到任何东西而不是这个。

提前致谢!

3 个答案:

答案 0 :(得分:4)

您在Guid上缺少引号,这就是您收到错误的原因。你应该使用参数化查询来避免sql注入和这样的问题(例如缺少引号)

应该(但不可取)

values({0},'{1}',... )  //<-- see the added quotes around the Guid part

理想情况下,您应该使用参数化

values(@id,@guid,... ) //<--

并设置值

cmd.Parameters.AddWithValue("@id", someValueHere);
cmd.Parameters.AddWithValue("@guid", someGuidValueHere");

答案 1 :(得分:2)

通常情况下,字符串连接会产生问题 如果您使用了参数化查询,则不会有任何问题

sqlCmd.CommandText = "Insert Into Member(MemberNo,MemberEmpId,...) " + 
                     "values(@guid, @memID,... )";
sqlCmd.Parameters.AddWithValue("@guid", MemNo);
sqlCmd.Parameters.AddWithValue("@memID", MemEmpNo);
....

sqlCmd.ExecuteNonQuery();

通过这种方式,正确解析值的工作将被传递给框架代码,框架代码更好地知道如何处理Guids,带引号的字符串,小数,日期等...

答案 2 :(得分:1)

如果您使用参数化查询,而不是在查询本身中嵌入所有值,则可能可以解决此问题。看看这些例子:

您可能遇到引号问题,其中一个文字的引号未被转义,或者SQL如何解释它或其他内容的参数类型不匹配。