无法使用vb.net插入数据库

时间:2016-04-03 21:25:14

标签: sql sql-server vb.net project

我遇到了问题,我不知道它是插入查询语句还是自己的数据库。

这是插入语句。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim value As Integer
    If txtPassword.Text = txtPassCon.Text Then
        Try
            constring = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\tmsDB.mdf;Integrated Security=True"
            con = New SqlConnection(constring)
            con.Open()
            cmd.Connection = con
            cmd.CommandText = "Insert into Login (Username,Password) values ('" & txtUsername.Text & "' , '" & txtPassword.Text & "')"
            cmd.ExecuteNonQuery()
            cmd.CommandText = "select max(id) from login"
            value = cmd.ExecuteScalar()
            cmd.CommandText = "Insert into Scouts (Name,Club,Email, LoginID) values ('" & txtName.Text & "' , '" & txtClub.Text & "' , '" & txtEmail.Text & "', '" & value & "')"
            cmd.ExecuteNonQuery()
            con.Close()
            MessageBox.Show("Registeration Sucessful")
        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try
    End If
End Sub

当我运行时,这似乎有效,因为它成功进入消息框并向我显示消息,但是当我检查数据库以查看它是否实际保存在那里时,它没有显示

CREATE TABLE [dbo].[Login] (
    [Id]       INT          NOT NULL IDENTITY ,
    [Username] NVARCHAR (15) NOT NULL,
    [Password] NVARCHAR (20) NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

这是数据库中的表。将id设置为Identity,因为我认为这是如何创建一个自动编号列

2 个答案:

答案 0 :(得分:0)

'创建ExecuteScalar函数

  Public Function ExecuteScalar(query As String, ByVal ParamArray param() As Object) As int

        Try

            _commanda = New SqlCommand(query, _connection)
            _commanda.CommandTimeout = 200

            _sqlda = New SqlDataAdapter(_commanda)
            _commanda.Transaction = _transaction


            For i = 0 To param.Count - 1

                _commanda.Parameters.AddWithValue("@" & i, param(i))

            Next

        dim value = _commanda.ExecuteScalar()

            _sqlda.Dispose()
            _commanda.Dispose()

            Return value

        Catch ex As Exception

            MessageBox.Show(ex.StackTrace)

            Return nothing
        End Try


    End Function

'创建ExecuteNonQuery函数

    Public Function ExecuteNonQuery(query As String, ByVal ParamArray param() As Object) As Boolean

        Try

            _commanda = New SqlCommand(query, _connection)
            _commanda.CommandTimeout = 200

            _sqlda = New SqlDataAdapter(_commanda)
            _commanda.Transaction = _transaction


            For i = 0 To param.Count - 1

                _commanda.Parameters.AddWithValue("@" & i, param(i))

            Next

            _commanda.ExecuteNonQuery()


            _sqlda.Dispose()
            _commanda.Dispose()

            Return True

        Catch ex As Exception

            MessageBox.Show(ex.StackTrace)

            Return False
        End Try


    End Function

'叫它

try
 if _connection.State = ConnectionState.Closed then
    _connection.open()
 end if

   if  ExecuteNonQuery("Insert into Login values (@0,@1)",txtUsername.Text, txtPassword.Text) then

   dim value = ExecuteScalar("select max(id) from login")

  if ExecuteNonQuery("Insert into Scouts (Name,Club,Email, LoginID) values (@0,@1,@2,@3)", txtName.Text , txtClub.Text , txtEmail.Text, value ) then

        _connection.Close()
        MessageBox.Show("Registeration Sucessful")

  else

        MessageBox.Show("Registeration Not Sucessful")
  end if

  else 

        MessageBox.Show("Registeration Not Sucessful")
  end if 

  Catch ex As Exception

        MessageBox.Show(ex.StackTrace)

  End try

答案 1 :(得分:0)

在catch块中将异常更改为SQLException也是有帮助的,例如  Catch ex As SQLException             MessageBox.Show(ex.ToString) 结束尝试

相关问题