从Visual Basic 2010连接到ms访问数据库时如何修复溢出异常

时间:2017-10-18 09:05:48

标签: vb.net visual-studio-2010 ms-access

我是视觉基础的新手。我正在为我的迷你项目在visual basic 2010中开发一个项目。我想将以visual basic形式插入的数据存储到ms access 2007中创建的数据库中。我输入了以下代码,但每次我输入的值都是表单并按提交我在消息框中将异常作为“溢出”。我无法找出原因。请帮帮我。

以下是代码:

Imports System.Data.OleDb

Public Class dn_register
    Dim provider As String
    Dim dataFile As String
    Dim connString As String
    Dim myConnection As OleDbConnection = New OleDbConnection

    Private Sub dn_sub_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dn_sub.Click

        provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
        dataFile = "F:\MyDatabase\MyProjectDatabase.accdb"
        connString = provider & dataFile
        myConnection.Close()
        myConnection.ConnectionString = connString
        myConnection.Open()
        Dim str As String
        str = "Insert into Dnr_tbl([Dname],[Age],[Bloodgroup],[Location],[Contact],[Email]) Values(?,?,?,?,?,?)"
        Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
        cmd.Parameters.Add(New OleDbParameter("Dname", CType(TextBox1.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("Age", CType(TextBox2.Text, Integer)))
        cmd.Parameters.Add(New OleDbParameter("Bloodgroup", CType(TextBox3.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("Location", CType(TextBox4.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("Contact", CType(TextBox5.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("Email", CType(TextBox6.Text, String)))

        Try
            cmd.ExecuteNonQuery()
            cmd.Dispose()
            myConnection.Close()
            TextBox1.Clear()
            TextBox2.Clear()
            TextBox3.Clear()
            TextBox4.Clear()
            TextBox5.Clear()
            TextBox6.Clear()


        Catch ex As Exception
            MsgBox(ex.Message)

        End Try

     End Sub

End Class

And here is the snapshot of my error message

2 个答案:

答案 0 :(得分:0)

我的猜测是这一行抛出异常:

function getCurrentLinkFrom(links){ var curPage = document.URL; curPage = curPage.substr(curPage.lastIndexOf("/ ")) ; links.each(function(){ var linkPage = $(this).attr("href"); linkPage = linkPage.substr(linkPage.lastIndexOf("/")); if (curPage == linkPage){ return $(this); } }); }; $(document).ready(function(){ var currentLink = getCurrentLinkFrom($('navbar a')); currentLink.addClass('current_link'); });

我的第一个建议是使用适当的控件来处理数字输入,例如NumericUpDown控件。

我的第二个建议(如果继续使用TextBox)是使用Integer.TryParse将String值显式转换为Integer。

我的第三个建议是停止在字符串值(textBox [n] .Text)上使用CType将它们转换为字符串,这是不必要的。

我的第四个建议是使用Parameter.AddWithValue,因为它将使用传递值的数据类型。

我的第五个也是最后一个建议是在Using语句中包装实现iDisposable的对象,或者至少明确地处理它们。

以下是实施建议2-5的示例,如果您采取我的第一个建议,那么#2是不必要的:

cmd.Parameters.Add(New OleDbParameter("Age", CType(TextBox2.Text, Integer)))

答案 1 :(得分:-1)

首先尝试缩小导致问题的参数。您可以注释掉所有参数并将其添加回去,直到找到问题(根据需要调整SQL语句以匹配参数计数)或选择可能的嫌疑人并将其注释掉并继续注释掉参数并调整SQL语句直到它工作。您可能需要临时调整Access中的表以允许测试列中的空值。整数值似乎可能是候选人,我会从那里开始。

一旦找到问题参数,很明显VB.NET和Access之间存在数据类型冲突或不匹配,或者您可能需要进行一些实验才能找到可以工作的VB版本。在您的示例中,下一个最可能的候选者将是字符串长度问题,并且通过查看表定义和文本框输入长度限制将非常明显。