我的数据库中有一个表,其中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,我尝试了但仍然给出了同样的错误。有人可以帮我解决这个问题。我找不到任何东西而不是这个。
提前致谢!
答案 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如何解释它或其他内容的参数类型不匹配。