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让存储过程返回数据表中的值呢?求解!

SQL Server 存储过程并在 VB.NET 中执行

在 VB.NET 中使用 OleDb.NET 调用 Access 2010 存储选择查询的异常

如何将 vb.net 中日期的空值传递给 sql 存储过程?

VB.Net 没有捕获存储过程 raiserror

从 sql 调用和执行存储过程到 vb.net 文本框