3

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

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

它向我抛出了以下异常,

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

我用谷歌搜索了这个错误,并得到了参考,我试过了,但仍然给出了同样的错误。有人可以帮我解决这个问题。除了这个,我没有找到任何东西。

提前致谢!

4

3 回答 3

7

您在 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");
于 2013-05-20T12:39:20.470 回答
3

像往常一样,问题来自字符串连接。
如果您使用了参数化查询,则不会有任何问题

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

sqlCmd.ExecuteNonQuery();

这样,正确解析值的工作将传递给更了解如何处理 Guid、带引号的字符串、小数、日期等的框架代码......

于 2013-05-20T12:34:18.920 回答
2

如果您使用参数化查询,而不是将所有值嵌入查询本身,这个问题可能会得到解决。查看这些示例:

您可能会遇到引号问题,其中一个文本具有未转义的引号,或者 SQL 解释它的参数类型不匹配,或其他问题。

于 2013-05-20T12:34:07.110 回答