Vb.net 连接已打开

Vb.net 连接已打开,vb.net,Vb.net,我刚开始做这个项目,因为我是VB.net的新手 更新部分在数据库中已有数据的情况下工作,但插入部分在没有所述IdNo数据的情况下不工作。当我按save时,它表示连接已打开 Public Sub AddBusinessInfo() Dim dr As MySqlDataReader Using conn As New MySqlConnection(connString) Using cmd As New MySqlCommand("SELECT * FROM tb

我刚开始做这个项目,因为我是VB.net的新手

更新部分在数据库中已有数据的情况下工作,但插入部分在没有所述
IdNo
数据的情况下不工作。当我按save时,它表示连接已打开

Public Sub AddBusinessInfo()
    Dim dr As MySqlDataReader
    Using conn As New MySqlConnection(connString)
        Using cmd As New MySqlCommand("SELECT * FROM tblbusinessinfo WHERE IdNo=@IdNo", conn)
            Try
                conn.Open()

                With cmd
                    .CommandType = CommandType.Text
                    .Parameters.AddWithValue("@IdNo", IDD)
                End With
                dr = cmd.ExecuteReader
                With dr
                    .Read()
                    If (dr.HasRows) Then
                        Using cmd1 As New MySqlCommand("UPDATE tblbusinessinfo SET BusinessType=@BusinessType, BusinessName=@BusinessName, RegDate=@RegDate,
                                    MotherCompany=@MotherCompany, TradeName=@TradeName, IPORegNo=@IPORegNo, Reg=@Reg, Province=@Province, District=@District,
                                    CityMuni=@CityMuni, Brgy=@Brgy, ZipCode=@ZipCode, HBNo=HBNo, RFNo=@RFNo, BldgName=@BldgName, StName=@StName,
                                    TelACode=@TelACode, TelNo=@TelNo, FaxACode=@FaxACode, FaxNo=@FaxNo, Email=@Email,
                                    Mobile=@Mobile, SocialMedia=@SocialMedia WHERE IdNo=@IdNo", conn)
                            With cmd1
                                .CommandType = CommandType.Text
                                .Parameters.AddWithValue("@BusinessType", rbBTypeVal)
                                .Parameters.AddWithValue("@BusinessName", txtBName.Text)
                                .Parameters.AddWithValue("@RegDate", dtBusinessRegDate.Value)
                                .Parameters.AddWithValue("@MotherCompany", If(String.IsNullOrEmpty(txtMotherComp.Text), DBNull.Value, txtMotherComp.Text))
                                .Parameters.AddWithValue("@TradeName", If(String.IsNullOrEmpty(txtTradeName.Text), DBNull.Value, txtTradeName.Text))
                                .Parameters.AddWithValue("@IPORegNo", If(String.IsNullOrEmpty(txtIPOReg.Text), DBNull.Value, txtIPOReg.Text))
                                .Parameters.AddWithValue("@Reg", cmbReg.Text)
                                .Parameters.AddWithValue("@Province", cmbProvince.Text)
                                .Parameters.AddWithValue("@District", lblDistrict.Text)
                                .Parameters.AddWithValue("@CityMuni", cmbCityMuni.Text)
                                .Parameters.AddWithValue("@Brgy", cmbBrgy.Text)
                                .Parameters.AddWithValue("@ZipCode", lblZipCode.Text)
                                .Parameters.AddWithValue("@HBNo", If(String.IsNullOrEmpty(txtHBNo.Text), DBNull.Value, txtHBNo.Text))
                                .Parameters.AddWithValue("@RFNo", If(String.IsNullOrEmpty(txtRFNo.Text), DBNull.Value, txtRFNo.Text))
                                If (txtBuildingName.Text = Nothing) Then
                                    .Parameters.AddWithValue("@BldgName", If(String.IsNullOrEmpty(txtBuildingName.Text), DBNull.Value, txtBuildingName.Text))
                                Else
                                    .Parameters.AddWithValue("@BldgName", StrConv(txtBuildingName.Text, VbStrConv.ProperCase))
                                End If
                                If (txtStname.Text = Nothing) Then
                                    .Parameters.AddWithValue("@StName", If(String.IsNullOrEmpty(txtStname.Text), DBNull.Value, txtStname.Text))
                                Else
                                    .Parameters.AddWithValue("@StName", StrConv(txtStname.Text, VbStrConv.ProperCase))
                                End If
                                .Parameters.AddWithValue("@TelACode", If(String.IsNullOrEmpty(txtLAC.Text), DBNull.Value, txtLAC.Text))
                                .Parameters.AddWithValue("@TelNo", If(String.IsNullOrEmpty(txtLTN.Text), DBNull.Value, txtLTN.Text))
                                .Parameters.AddWithValue("@FaxACode", If(String.IsNullOrEmpty(txtFAC.Text), DBNull.Value, txtFAC.Text))
                                .Parameters.AddWithValue("@FaxNo", If(String.IsNullOrEmpty(txtFTN.Text), DBNull.Value, txtFTN.Text))
                                .Parameters.AddWithValue("@Email", If(String.IsNullOrEmpty(txtBusinessEmail.Text), DBNull.Value, txtBusinessEmail.Text))
                                .Parameters.AddWithValue("@Mobile", If(String.IsNullOrEmpty(txtMobile.Text), DBNull.Value, txtMobile.Text))
                                .Parameters.AddWithValue("@SocialMedia", If(String.IsNullOrEmpty(txtSocMedia.Text), DBNull.Value, txtSocMedia.Text))
                                .Parameters.AddWithValue("@IdNo", IDD)
                            End With
                            conn.Close()

                            If (txtBName.Text = "" Or cmbReg.Text = "" Or cmbProvince.Text = "" Or cmbCityMuni.Text = "" Or cmbBrgy.Text = "" Or lblDistrict.Text = "") Then
                                MsgBox("Fields with red texts are required!")
                            Else
                                Dim res As Integer = MsgBox("Are you sure you want to update the data?", MsgBoxStyle.YesNo, "System")
                                If (res = MsgBoxResult.Yes) Then
                                    conn.Open()
                                    cmd1.ExecuteNonQuery()
                                    MsgBox("Success!")

                                End If
                            End If
                        End Using
                        conn.Close()
                    Else
                        Using cmd2 As New MySqlCommand("INSERT INTO tblbusinessinfo (IdNo, BusinessType, BusinessName, RegDate, MotherCompany, TradeName, IPORegNo, Reg,
                                                        Province, District, CityMuni, Brgy, ZipCode, HBNo, RFNo, BldgName, StName, TelACode, TelNo, FaxACode,
                                                        FaxNo, Email, Mobile, SocialMedia) VALUES (@IdNo, @BusinessType, @BusinessName, @RegDate, @MotherComp, @TradeName,
                                                        IPORegNo, @Reg, @Province, @District, @CityMuni, @Brgy, @ZipCode, @HBNo, @RFNo, @BldgName, @StName, 
                                                        @TelACode, @TelNo, @FaxACode, @FaxNo, @Email, @Mobile, @SocialMedia)")
                            conn.Open()
                            With cmd2
                                .CommandType = CommandType.Text
                                .Parameters.AddWithValue("@IdNo", IDD)
                                .Parameters.AddWithValue("@BusinessType", rbBTypeVal)
                                .Parameters.AddWithValue("@BusinessName", txtBName.Text)
                                .Parameters.AddWithValue("@RegDate", dtBusinessRegDate.Value)
                                .Parameters.AddWithValue("@MotherComp", If(String.IsNullOrEmpty(txtMotherComp.Text), DBNull.Value, txtMotherComp.Text))
                                .Parameters.AddWithValue("@TradeName", If(String.IsNullOrEmpty(txtTradeName.Text), DBNull.Value, txtTradeName.Text))
                                .Parameters.AddWithValue("@IPORegNo", If(String.IsNullOrEmpty(txtIPOReg.Text), DBNull.Value, txtIPOReg.Text))
                                .Parameters.AddWithValue("@Reg", cmbReg.Text)
                                .Parameters.AddWithValue("@Province", cmbProvince.Text)
                                .Parameters.AddWithValue("@District", lblDistrict.Text)
                                .Parameters.AddWithValue("@CityMuni", cmbCityMuni.Text)
                                .Parameters.AddWithValue("@Brgy", cmbBrgy.Text)
                                .Parameters.AddWithValue("@ZipCode", lblZipCode.Text)
                                .Parameters.AddWithValue("@HBNo", If(String.IsNullOrEmpty(txtHBNo.Text), DBNull.Value, txtHBNo.Text))
                                .Parameters.AddWithValue("@RFNo", If(String.IsNullOrEmpty(txtRFNo.Text), DBNull.Value, txtRFNo.Text))
                                If (txtBuildingName.Text = Nothing) Then
                                    .Parameters.AddWithValue("@BldgName", If(String.IsNullOrEmpty(txtBuildingName.Text), DBNull.Value, txtBuildingName.Text))
                                Else
                                    .Parameters.AddWithValue("@BldgName", StrConv(txtBuildingName.Text, VbStrConv.ProperCase))
                                End If
                                If (txtStname.Text = Nothing) Then
                                    .Parameters.AddWithValue("@StName", If(String.IsNullOrEmpty(txtStname.Text), DBNull.Value, txtStname.Text))
                                Else
                                    .Parameters.AddWithValue("@StName", StrConv(txtStname.Text, VbStrConv.ProperCase))
                                End If
                                .Parameters.AddWithValue("@TelACode", If(String.IsNullOrEmpty(txtLAC.Text), DBNull.Value, txtLAC.Text))
                                .Parameters.AddWithValue("@TelNo", If(String.IsNullOrEmpty(txtLTN.Text), DBNull.Value, txtLTN.Text))
                                .Parameters.AddWithValue("@FaxACode", If(String.IsNullOrEmpty(txtFAC.Text), DBNull.Value, txtFAC.Text))
                                .Parameters.AddWithValue("@FaxNo", If(String.IsNullOrEmpty(txtFTN.Text), DBNull.Value, txtFTN.Text))
                                .Parameters.AddWithValue("@Email", If(String.IsNullOrEmpty(txtBusinessEmail.Text), DBNull.Value, txtBusinessEmail.Text))
                                .Parameters.AddWithValue("@Mobile", If(String.IsNullOrEmpty(txtMobile.Text), DBNull.Value, txtMobile.Text))
                                .Parameters.AddWithValue("@SocialMedia", If(String.IsNullOrEmpty(txtSocMedia.Text), DBNull.Value, txtSocMedia.Text))
                            End With
                            conn.Close()
                            If (txtBName.Text = "" Or cmbReg.Text = "" Or cmbProvince.Text = "" Or cmbCityMuni.Text = "" Or cmbBrgy.Text = "" Or lblDistrict.Text = "") Then
                                MsgBox("Fields with red texts are required!")
                            Else
                                Dim res As Integer = MsgBox("Are you sure you want to update the data?", MsgBoxStyle.YesNo, "System")
                                If (res = MsgBoxResult.Yes) Then
                                    conn.Open()
                                    cmd2.ExecuteNonQuery()
                                    MsgBox("Success!")

                                End If
                            End If
                        End Using
                    End If
                End With
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Using
    End Using
End Sub
已经解决了。cmd2缺少参数,应如下所示:

    Using cmd2 As New MySqlCommand("INSERT INTO tblbusinessinfo (IdNo, BusinessType, BusinessName, RegDate, MotherCompany, TradeName, IPORegNo, Reg,
                                                    Province, District, CityMuni, Brgy, ZipCode, HBNo, RFNo, BldgName, StName, TelACode, TelNo, FaxACode,
                                                    FaxNo, Email, Mobile, SocialMedia) VALUES (@IdNo, @BusinessType, @BusinessName, @RegDate, @MotherComp, @TradeName,
                                                    IPORegNo, @Reg, @Province, @District, @CityMuni, @Brgy, @ZipCode, @HBNo, @RFNo, @BldgName, @StName, 
                                                    @TelACode, @TelNo, @FaxACode, @FaxNo, @Email, @Mobile, @SocialMedia)", conn)'

这是因为您正在调用
conn.Open()
两次:

首先在开头,紧跟在
Try
关键字之后

第二次,如果
if(dr.HasRows)则
条件失败,则转到
Else
部分,在该部分中,使用
语句在
之后打开连接()


只要删除额外的
Open
方法,您就会没事:)

在cmd2声明中,您忘记指定连接变量

Using cmd2 As New MySqlCommand("INSERT INTO tblbusinessinfo (...)", ---> conn <---)

对不起,我应该删除哪一个?请指出,因为我真的很难过。很抱歉again@lowkeylegendarymike使用
语句的
之后的一个。@Michael Turczyn更新有效,但插入无效。它说连接必须是有效的,并且在insert语句之前openTry disposition
dr
对象:
dr.Dispose()
在disposition dral之后仍然存在相同的错误。已经解决了它。cmd2缺少参数您根本不需要读卡器,如果只需要知道记录是否存在,也不需要下拉整个记录。只需使用tblbusinessinfo中的
选择Count(*),其中IdNo=@IdNo然后
cmd.ExecuteScalar()
是的。我刚刚注意到了,正在编辑这篇文章。无论如何谢谢你
cmd2.Connection = conn