我正在尝试使用带有2个表的访问数据库(2010)在vb.net中创建Windows窗体应用程序(作为主要思想,我正在尝试创建银行贷记应用程序)。我使用一张表进行登录,另一张表将元素从Windows窗体插入其中。
对于登录表,一切正常,但是对于第二个表(客户端),我遇到了一些问题。
客户的表详细信息是:ID(自动编号),名字(文本),姓氏(文本),PID(数字),地址(文本),城市(文本),婚姻状况(文本),无子女(数字) ,日期(日期/时间)。
我为客户表创建了一个插入查询,如下所示:
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
与客户端表中的行相比,我知道它是不完整的,这是由于我在保存到数据库时遇到的问题。当我运行该应用程序并点击“保存到数据库”按钮时,出现以下错误:
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
Clienti
(nume
,prenume
,cnp
,adresa
,localitate
,stare civila
)VALUES(?,?,?,?,?,?,?,?,?),并且其定义为Public Overloads Overridable Function InsertQueryClienti (ByVal作为字符串,ByVal作为字符串,ByVal作为字符串,ByVal cnp作为Global.System.Nullable(整数),ByVal adresa作为字符串,ByVal本地化为字符串,ByVal stare_civila作为字符串,ByVal numarcopii作为Global.System.Nullable(整数) ))作为整数necasatorit指的是婚姻状况文本框。我不明白为什么它会给我这个错误,因为文本框显然是一个字符串,并且在表中该行被设置为文本。
最佳答案
您对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)
前三个参数
nume
,prenume
和cnp
相同,但是之后使用varsta
。这会将所有内容向右移动。
starecivilatxt.Text
作为最后一个参数传递类型为Integer。
这样,参数在定义和调用中的顺序相同。
InsertQueryClienti(nume, prenume, cnp, adresa, localitate, starecivilatxt.Text, ???)
我不知道最后一个参数应该是什么。也许
varsta
?关于vb.net - vb.net(在Visual Studio 2013中制造)和Access DB的几个问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24550246/