vb.net中直接查询和存储过程的区别
Posted
技术标签:
【中文标题】vb.net中直接查询和存储过程的区别【英文标题】:Difference of Direct Query and stored procedure in vb.net 【发布时间】:2018-06-03 15:50:42 【问题描述】:直接查询和存储过程有什么区别吗?
[下面]
我有这个查询 6 年,因为现在我在一家公司工作了 7 个月,我在使用这个查询的 .net 应用程序中使用 Select
*Update*
delete
Insert
如果这是存储过程或直接查询或其他任何内容,我不知道它会调用什么,但输出是相同的
<WebMethod()> _
Public Function add(ByVal firstname As String, ByVal lastname As String)
Dim con As SqlConnection
Dim com As SqlCommand
con = New SqlConnection(cstring)
con.Open()
com = New SqlCommand("SELCT * FROM NewSalestbl where Firstname = @Firstname and Lastname= @Lastname", con)
com.Parameters.AddWithValue("@Firstname", firstname)
com.Parameters.AddWithValue("@Lastname", lastname)
Dim reader As SqlDataReader = com.ExecuteReader
While reader.Read
status = reader("Lastname").ToString
End While
MsgBox("Inserted")
con.Close()
Return status
End Function
我想知道创建查询时最好的程序是什么?
[下]
我现在尝试使用此代码
Dim con As SqlConnection
Dim com As New SqlCommand
con = New SqlConnection(cstring)
con.Open()
com.CommandText = "searchtest"
com.CommandType = CommandType.StoredProcedure
com.Connection = con
com.Parameters.AddWithValue("@firstname", TextBox1.Text)
Dim raeder As SqlDataReader
raeder = com.ExecuteReader
While raeder.Read
MsgBox(raeder(1))
End While
如果这两个示例相同或不同,谁能向我解释一下 TIA
【问题讨论】:
【参考方案1】:直接 SQL 很好,因为它更便于移植。从 SQL Server 跳转到另一个数据库?更改程序中的文本,您不需要访问数据库。如果您的组织不允许您创建存储过程,这也很好。 (所有数据库访问权在一个人手中,所有桌面/Web 代码在另一个人手中。)
存储过程很好,因为它是编译的。对于一个简单的查询,它可能并不重要,但对于更长的、多语句的查询,它可能会。如果查询中有错误,您可以在服务器上的一个地方进行更改,不会将新的可执行文件推广到十几个桌面。
答案是,以两种方式测试性能,如果没有显着差异,那么您应该根据使维护最省事的因素来选择。
我更喜欢程序,但您的情况可能会有所不同。
【讨论】:
我认为如果程序员受雇于公司,直接查询是好的,因为他们可以修改代码并且存储过程在维护查询方面很好跨度> 很高兴看到参数的使用,但是.AddWithValue 有它自己的问题。 ADO.net 必须猜测您想要什么数据类型。由于世俗,ADO 为您的 TextBox1.Text 选择了 nvarchar。您的数据库是不久前创建的,它不是世俗的,它的 FirstName 列是 varchar。现在不允许数据库冒丢失数据的风险,因此它会扩大每一行以适应 nvarchar。那些对加快查询速度有很大帮助的可爱索引变得毫无用处,我们甚至还没有得到姓氏。一个简单的.. cmd.Parameters.Add("@FirstName", SqlDbType.VarChar, 100).Value = Text1.Text @Mary nvarchar 和 varchar 可以影响系统输入的值吗?我只知道 nvarchar 可以用作普通输入,而 varchar 可以在输入中使用,例如车辆的车牌号,顺便说一下,谢谢您建议使用 .add 属性:D 我希望真正的 DBA 可以在这里加入,但据我所知,varchar 不能接受像西班牙语中常见的带有波浪线的 n 这样的特殊字符。随着世界变得越来越小,对 nvarchar 的需求也在增长,即使它占用了更多空间。存储很便宜。不保证此信息的准确性。 varchar 可以接受的字符取决于它定义的字符集。 CREATE TABLE FOO ( ID INT NOT NULL IDENTITY(1, 1), FrenchText VARCHAR(10) COLLATE French_CI_AS NULL, Entered DEFAULT(GETDATE()) );你可以为你想要的任何字符选择一个排序规则。 NVARCHAR 的好处是您不必选择,您可以混合使用法语和日语,而不必选择其中之一,因为您使用的是 unicode 而不是代码页/排序规则。 ***.com/questions/7781103/…以上是关于vb.net中直接查询和存储过程的区别的主要内容,如果未能解决你的问题,请参考以下文章
VB.NET是如何使用ADO让存储过程返回数据表中的值呢?求解!
在 VB.NET 中使用 OleDb.NET 调用 Access 2010 存储选择查询的异常