在VB.NET中我添加一个SQL Server数据库的条目,它不断添加双...?

时间:2015-06-18 20:05:58

标签: sql-server

我正在尝试向SQL Server数据库添加一个条目,并且它一直在添加double,我不知道为什么。此外,当我尝试在datagridview上显示SQL Server数据表中的数据时,它不会显示所有列!虽然当我使用SQL Server Management Studio时,它会显示所有列。

这是我的代码:

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    'Add sale
    Dim constring As String = "server=classified;database=classified"

    Dim myconnection As New SqlConnection(constring)
    myconnection.Open()

    Dim theQuery As String = "uspAddSale @Salesperson, @VIN, @Price, @MSRP, @CommissionRate, @CommissionEarned"
    ' ^^ Used to check if an identical entry already exists in the database.

    Dim repeatChecker As SqlCommand = New SqlCommand(theQuery, myconnection)

    repeatChecker.Parameters.Add("@Salesperson", SqlDbType.VarChar).Value = TextBox1.Text
    repeatChecker.Parameters.Add("@VIN", SqlDbType.VarChar).Value = TextBox2.Text
    repeatChecker.Parameters.Add("@Price", SqlDbType.VarChar).Value = TextBox3.Text
    repeatChecker.Parameters.Add("@MSRP", SqlDbType.VarChar).Value = TextBox4.Text
    repeatChecker.Parameters.Add("@CommissionRate", SqlDbType.VarChar).Value = TextBox5.Text
    repeatChecker.Parameters.Add("@CommissionEarned", SqlDbType.VarChar).Value = TextBox6.Text

    Using reader As SqlDataReader = repeatChecker.ExecuteReader()
        If reader.HasRows Then
            ' User already exists
            MsgBox("PLEASE CHECK THIS MESSAGE BOX This sale already exists in the dealership's inventory.", MsgBoxStyle.Exclamation)
        Else
            reader.Close()

            repeatChecker.ExecuteNonQuery()

            Firs.BindGridSales()
            Firs.TabControl1.SelectTab(2)
            Firs.BindComboboxVIN()
            Firs.BindComboboxSalesperson()

            'Dim YearDisplay As String = Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(TextBox7.Text)
            'Dim MakeDisplay As String = Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(TextBox8.Text)
            'Dim ModelDisplay As String = Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(TextBox9.Text)
            'Dim VINDisplay As String = TextBox10.Text.ToUpper

            'MsgBox("A " + YearDisplay + " " + MakeDisplay + " " + ModelDisplay + " with VIN # " + VINDisplay + " has successfully been added to the dealership's inventory.")
        End If
    End Using

    myconnection.Close()
End Sub

这是我在SQL Server中的存储过程:

ALTER PROCEDURE [dbo].[uspAddSale] 
      @Salesperson varchar(100), 
      @VIN varchar(17), 
      @Price varchar(100), 
      @MSRP varchar(100), 
      @CommissionRate varchar(10), 
      @CommissionEarned varchar(10)
AS
    INSERT INTO Sales (Salesperson, VIN, [Sale Price], MSRP, [Commission Rate], [Commission Earned])
    VALUES (@Salesperson, @VIN, @Price, @MSRP, @CommissionRate, @CommissionEarned)

1 个答案:

答案 0 :(得分:0)

以下一行:

Using reader As SqlDataReader = repeatChecker.ExecuteReader()

导致插入过程触发一次,插入一条记录。它不返回任何记录,因此接下来的几行:

If reader.HasRows Then
    ' User already exists
    MsgBox("PLEASE CHECK THIS MESSAGE BOX This sale already exists in the dealership's inventory.", MsgBoxStyle.Exclamation)
Else
    reader.Close()
    repeatChecker.ExecuteNonQuery()

落入“Else”部分,“reader.HasRows”返回false。这导致.ExecuteNonQuery使用相同的文本和参数触发,重复插入。

网格不显示任何行,因为过程或代码中的任何内容都不会从数据库返回任何内容以显示。