所以我正在阅读一本关于ADO的书,我已经到了描述ADO中参数和查询的章节的末尾。在本书中,它提供了以下代码示例以将参数传递给SQL服务器:
Dim paramValue As New SqlParameter("@NewSalary", SqlDbType.Money)
paramValue.Value = 50000@
salaryUpdate.Parameters.Add(paramValue)
paramValue = New SqlParameter("@EmployeeID", SqlDbType.BigInt)
paramValue.Value = 25&
salaryUpdate.Parameters.Add(paramValue)
salaryUpdate.Parameters.AddWithValue("@NewSalary", 50000@)
salaryUpdate.Parameters.AddWithValue("@EmployeeID", 25&)
对于C#,它显示
salaryUpdate.Parameters.AddWithValue("@NewSalary", 50000m);
salaryUpdate.Parameters.AddWithValue("@EmployeeID", 25L);
这本书没有真正涉及的是为什么定义的值有和M,L,@,&附加到他们的字符。为什么是这样? vb和c#之间的区别可能只是语法?
尝试在MSDN上做一些研究,但这些类型的例子不会出现在那里,或者看起来如此。 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx
感谢您的任何澄清
答案 0 :(得分:4)
在VB.NET和C#中,您可以将一个后缀字符添加到常量值以解释其数据类型。它是VB6时代的遗留问题,可以帮助解决可移植性问题。现在,您应该尝试使用显式常量Const NAME As Type = value声明,并仅在需要时使用后缀。
See VB.NET Type Characters on MSDN
对于AddWithValue
vs new SqlParameter
语法,后者更可取,因为您可以准确选择数据类型和传递给数据库引擎的参数大小。通过这种方式,数据库引擎可以更好地优化查询,并在重新执行时重用已准备好的语句。然而,AddWithValue在简单性和易用性方面具有优势。因此,如果您不担心性能问题,也可以使用它。
顺便说一句,这两种语法可以在VB.NET和C#中使用。它们是可以从每种托管语言调用的.NET库的一部分
答案 1 :(得分:0)
添加参数值时,它取决于参数中指定的数据类型。一个正常的例子就像您可以在MSDN http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx上找到的那个。
关于额外的M,L,@,&你不再需要它们了。每当我使用AddWithValue或添加参数时,我总是用双引号传递值。