vb.net(在Visual Studio 2013中制作)和Access DB的几个问题

时间:2014-07-03 09:42:40

标签: vb.net error-handling insert

我正在尝试使用带有2个表的访问数据库(2010)在vb.net中创建一个Windows表单应用程序(作为主要想法,我正在尝试创建一个银行贷记应用程序)。我使用一个表进行登录,另一个表从windows表单中插入元素。

对于登录表,一切正常,但是当它出现在第二个表(客户端)时,我遇到了一些问题。

客户的表详细信息是:ID(自动编号),名字(文本),姓氏(文本),PID(编号),地址(文本),城市(文本),婚姻状况(文本),nochildren (数字),日期(日期/时间)。

我为clients表创建了一个插入查询,如下所示:

INSERT INTO `Clienti` (`nume`, `prenume`, `cnp`, `adresa`, `localitate`, `stare civila`) VALUES (?, ?, ?, ?, ?, ?, ?, ?).

在我创建的Windows窗体中,我有以下元素:名字(文本框),姓氏(文本框),PID(文本框),地址(文本),城市(文本),婚姻状况(文本)和一个按钮,应该将它们保存到我的客户表中。

保存到数据库按钮的代码是:

Convert.ToInt32(cnptxt.Text)
Convert.ToInt32(numarcopiitxt.Text)

Dim cnpp As Integer
cnpp = Val(cnptxt.Text)
Dim nrcopii As Integer
nrcopii = Val(numarcopiitxt.Text)

Dim nume As String

Dim prenume As String
Dim cnp As Integer
Dim varsta As Integer
Dim adresa As String
Dim localitate As String
Dim starecivila As String
Dim numarcopii As Integer

nume = numetxt.Text
prenume = prenumetxt.Text
cnp = cnpp
varsta = varstatxt.Text
adresa = adresatxt.Text
localitate = localitatetxt.Text
starecivila = starecivilatxt.Text
numarcopii = numarcopiitxt.Text
If Me.ClientiTableAdapter.InsertQueryClienti(nume, prenume, cnp, varsta, adresa, localitate, starecivilatxt.Text) Then
    MsgBox("Client adaugat cu succes in baza de date")
Else
    MsgBox("O eroare a fost intalnita intr-unul din campurile completate. Reincercati!")
End If

我知道与来自clients表的行相比,它是不完整的,这是由于我在保存到DB时遇到的问题。当我运行应用程序并点击保存到数据库按钮时,我收到以下错误:

An unhandled exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll

Additional information: Conversion from string "necasatorit" to type 'Integer' is not valid.

InsertQueryClienti的代码是INSERT INTO Clientinumeprenumecnpadresalocalitate,{{1} })VALUES(?,?,?,?,?,?,?,?)及其定义为Public Overloads Overridable Function InsertQueryClienti(ByVal nume As String,ByVal prenume As String,ByVal cnp As Global.System.Nullable (Ofger),ByVal adresa As String,ByVal localitate As String,ByVal stare_civila As String,ByVal numarcopii As Global.System.Nullable(Of Integer))As Integer

necasatorit指的是婚姻状况文本框。我无法理解为什么它会给我这个错误,因为文本框显然是一个字符串,而在表中该行被设置为文本。

1 个答案:

答案 0 :(得分:1)

您对InsertQueryClienti()的定义如下:

Public Overloads Overridable Function InsertQueryClienti(
    ByVal nume As String, 
    ByVal prenume As String, 
    ByVal cnp As Global.System.Nullable(Of Integer), 
    ByVal adresa As String, 
    ByVal localitate As String, 
    ByVal stare_civila As String, 
    ByVal numarcopii As Global.System.Nullable(Of Integer)) As Integer

但你这样称呼它:

InsertQueryClienti(nume, prenume, cnp, varsta, adresa, localitate, starecivilatxt.Text)

前三个参数numeprenumecnp是相同的,但之后您使用varsta。 这将一切都转移到了右边。 starecivilatxt.Text作为最后一个参数传递 类型为Integer。

这样,参数在定义和调用中的顺序相同。

InsertQueryClienti(nume, prenume, cnp, adresa, localitate, starecivilatxt.Text, ???)

我不知道最后一个参数应该是什么。也许varsta