向Sql Server插入Guid值时出错(UniqueIdentifier列)。 (详细描述在内部)

4

我在我的数据库中有一张表,其中有两列是唯一标识非空类型。我正在尝试使用ASP.NET C#从该表中插入一行,如下所示:

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

我遇到了以下异常:

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

我在谷歌上搜索了这个错误,找到了参考资料,尝试了一下但仍然出现相同的错误。有人能帮我解决吗?我没有找到其他信息。

提前感谢!


2
列“MemberNo”的数据类型是什么?变量MemNo呢? - Steve
MemberNo 是唯一标识符,MemNo 是全局唯一标识符。 - Gopinath Perumal
1
你没有错过Guid的引号吗? - noobob
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");

3

通常问题出现在字符串拼接上。
如果您使用了参数化查询,就不会有任何问题。

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

sqlCmd.ExecuteNonQuery();

这样做的好处是,正确解析值的工作将被传递给框架代码,它更懂得如何处理Guids、带引号的字符串、小数、日期等等...


2

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