【问题标题】:How to solve vb.net database connection error try catch database?如何解决 vb.net 数据库连接错误 try catch 数据库?
【发布时间】:2016-12-12 15:16:23
【问题描述】:

我尝试注册一个用户,但是当我想保存时,连接会转到“catch”而不是“try”。 我可以调试程序,但数据没有保存在数据库中。谁能告诉我是什么问题?谢谢。

Public Class DTRCLASS
Dim mDataPath As String
Public Shared DataModule As DTRCLASS

Private Function GetConnection() As OleDb.OleDbConnection

    Return New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & mDataPath & "\dtrdb.accdb")

End Function

Public Overloads Function SaveMEM() As DataSet
    Return Me.SaveMEM("MEM_CODE")
End Function

Public Overloads Function SaveMEM(ByVal sortfield As String) As DataSet
    Dim a As String
    Dim b As String
    b = Form1.Label16.Text & " " & Form1.Label15.Text

    a = Form1.txtlast.Text & ", " & Form1.txtfirst.Text & " " & Form1.txtmi.Text & "."

    Dim conn As OleDb.OleDbConnection = GetConnection()
    Dim SQL As String

    Try
        SQL = "INSERT INTO MEMBERS_PROF ( MEM_CODE, LOG_ID, NAME, COURSE_POSITION,GENDER," & _
        "ENCODER, DATE_ENCODED )VALUES ( @MEM_CODE, @LOG_ID, @NAME, @COURSE_POSITION,@GENDER,@ENCODER, @DATE_ENCODED);"


        Dim cmd As New OleDb.OleDbCommand(SQL, conn)
        cmd.Parameters.Add(New OleDb.OleDbParameter("@MEM_CODE", Form1.txtid.Text))
        cmd.Parameters.Add(New OleDb.OleDbParameter("@LOG_ID", Form1.txtpin.Text))
        cmd.Parameters.Add(New OleDb.OleDbParameter("@NAME", a))
        cmd.Parameters.Add(New OleDb.OleDbParameter("@COURSE_POSITION", Form1.txtpos.Text))
        cmd.Parameters.Add(New OleDb.OleDbParameter("@GENDER", Form1.cbogen.SelectedItem))
        cmd.Parameters.Add(New OleDb.OleDbParameter("@ENCODER", Form1.GuestToolStripMenuItem.Text))
        cmd.Parameters.Add(New OleDb.OleDbParameter(" @DATE_ENCODED", b))

这个cmd.ExecuteNonQuery() 调试时总是收到消息“连接错误,ID 或 PIN 已存在”error message when i try debug using the coding 'MsgBox(ex.ToString')

        conn.Open()
        cmd.ExecuteNonQuery()



        MessageBox.Show("New Member is added!")
        clear()
        'RefreshDGV()


    Catch ex As Exception

        MsgBox("Error in connection! ID or PIN already exist!")
    Finally
        conn.Close()
        conn.Dispose()
    End Try

End Function

Line 91

【问题讨论】:

  • 当您遇到错误并询问有关该错误的问题时,您需要包含该错误。在这种情况下,它称为异常(错误如何在 .net 中表现出来)。包括消息、异常类型、堆栈跟踪和任何内部异常详细信息。使用问题上的编辑链接包含该详细信息,请勿将其作为评论。
  • 可能与您在" @DATE_ENCODED", 有空间的事实有关。这应该是cmd.Parameters.Add(New OleDb.OleDbParameter("@DATE_ENCODED", b))。但是,正如已经提出的那样,编辑带有例外等的问题,因为这可能有助于立即识别问题。另外,当您在使用它时,为什么不使用Tour 并查看How to ask
  • 异常会告诉你出了什么问题。该代码会丢弃消息并打印无用的消息。 Name也是Access SQL中的保留字,所以要转义[Name]
  • MsgBox (ex.ToString)
  • @Igor 感谢您的回复..对不起,因为这是我第一次在这里询问并使用此网站..我已将 MsgBox 更改为(ex.ToString)以识别错误和错误我发现在'cmd.ExecuteNonQuery()' ..我不知道为什么它不能将数据执行到数据库..编码或数据库有问题吗?

标签: sql database vb.net ms-access


【解决方案1】:

从您的错误图片来看,问题是“标准表达式中的数据类型不匹配”。去看看。这句话在顶部附近。

此语句应该让您问,“您要插入的表中的数据类型是什么,我要插入的数据类型是什么?”可能是不匹配。

从您的代码 sn-p 来看,插入的几个字段似乎是文本,但有些字段似乎描述了其他数据类型。喜欢这个

cmd.Parameters.Add(New OleDb.OleDbParameter(" @DATE_ENCODED", b))

但是 b 在这里被定义为类似文本的数据类型。

Dim b As String

字段名称听起来像日期类型。

如果您将 @DateEncoded 参数转换为插入语句中的日期字段(CDate 是执行此操作的函数),则应该解决此字段的错误。尽管可能还有其他不匹配的字段,这取决于您的表格的外观。这是包含日期转换功能的插入语句。

SQL = "INSERT INTO MEMBERS_PROF ( MEM_CODE, LOG_ID, NAME, COURSE_POSITION,GENDER," & _
"ENCODER, DATE_ENCODED )VALUES ( @MEM_CODE, @LOG_ID, @NAME, @COURSE_POSITION,@GENDER,@ENCODER, CDate(@DATE_ENCODED));"

【讨论】:

    猜你喜欢
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 2016-10-06
    • 2016-07-17
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多