我正在尝试向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)
答案 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
使用相同的文本和参数触发,重复插入。
网格不显示任何行,因为过程或代码中的任何内容都不会从数据库返回任何内容以显示。