Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 使用Access数据库的更新语句(VB 2008)_Vb.net_Sql Update_Ms Access 2010 - Fatal编程技术网

Vb.net 使用Access数据库的更新语句(VB 2008)

Vb.net 使用Access数据库的更新语句(VB 2008),vb.net,sql-update,ms-access-2010,Vb.net,Sql Update,Ms Access 2010,我正在尝试为我的程序创建一个update语句,该语句将根据用户输入的数据使用SQL更新数据库,不幸的是,我有一个问题,一次只能更新一列,有时它们都不起作用。我知道这个功能非常基本,对攻击不是很安全,但这是我正在做的一个小项目。不幸的是,我只有基本的编程技能,所以我很难让这部分工作。如果能提供任何帮助,我们将不胜感激 Private Sub btnsave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handl

我正在尝试为我的程序创建一个update语句,该语句将根据用户输入的数据使用SQL更新数据库,不幸的是,我有一个问题,一次只能更新一列,有时它们都不起作用。我知道这个功能非常基本,对攻击不是很安全,但这是我正在做的一个小项目。不幸的是,我只有基本的编程技能,所以我很难让这部分工作。如果能提供任何帮助,我们将不胜感激

Private Sub btnsave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnsave.Click

    Dim con As New OleDb.OleDbConnection

    Dim d1 As New OleDb.OleDbDataAdapter
    Dim d2 As New OleDb.OleDbDataAdapter
    Dim d3 As New OleDb.OleDbDataAdapter
    Dim d4 As New OleDb.OleDbDataAdapter
    Dim d5 As New OleDb.OleDbDataAdapter
    Dim d6 As New OleDb.OleDbDataAdapter
    Dim d7 As New OleDb.OleDbDataAdapter
    Dim d8 As New OleDb.OleDbDataAdapter
    Dim d9 As New OleDb.OleDbDataAdapter
    Dim d10 As New OleDb.OleDbDataAdapter

    Dim dt As New DataTable("Animals")

    'uses the 2010 compatible connection string
    con.ConnectionString = "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source = h:\Animals.accdb"
    con.Open()

    MsgBox("UPDATE Animals SET LatinName = '" & latintxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'")
    d1 = New OleDb.OleDbDataAdapter("UPDATE Animals SET LatinName = '" & latintxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)
    d2 = New OleDb.OleDbDataAdapter("UPDATE Animals SET LocationFound = '" & locationtxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)
    d3 = New OleDb.OleDbDataAdapter("UPDATE Animals SET AverageHeight = '" & heighttxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)
    d4 = New OleDb.OleDbDataAdapter("UPDATE Animals SET AverageWeight = '" & weighttxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)
    d5 = New OleDb.OleDbDataAdapter("UPDATE Animals SET DietaryNeeds = '" & diettxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)
    d6 = New OleDb.OleDbDataAdapter("UPDATE Animals SET ConservationStatus = '" & statustxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)
    d7 = New OleDb.OleDbDataAdapter("UPDATE Animals SET AverageLifeSpan = '" & lifetxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)
    d8 = New OleDb.OleDbDataAdapter("UPDATE Animals SET BreedingSeason = '" & breedtxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)
    d9 = New OleDb.OleDbDataAdapter("UPDATE Animals SET AverageLength = '" & lengthtxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)
    d10 = New OleDb.OleDbDataAdapter("UPDATE Animals SET AnimalName = '" & nametxt.Text & "'" & " WHERE AnimalName = " & "'" & Form1.txtname.Text & "'", con)

    d1.Fill(dt)
    d2.Fill(dt)
    d3.Fill(dt)
    d4.Fill(dt)
    d5.Fill(dt)
    d6.Fill(dt)
    d7.Fill(dt)
    d8.Fill(dt)
    d9.Fill(dt)
    d10.Fill(dt)

    con.Close()

End Sub

要执行update命令,可以编写一条语句并使用with方法

有几个问题需要注意,可能会导致更新失败。
首先,所有参数值都是string类型,这可能是您的主要问题。如果数据库字段不是文本类型,则需要将这些值转换为适当的类型。
例如,如果字段
AverageHeight
为数字(双精度),则参数应写为:

cmd.Parameters.AddWithValue("@p3",Convert.ToDouble(heighttxt.Text))
当然,heighttxt中的文本应该可以转换为double

第二个问题是用于查找要更新的记录的参数的内容。
在查询中,此字段名为
AnimalName
,您可以使用
Form1.txtname.Text
搜索记录,但在相同的查询文本中,您尝试使用
nametxt.Text
更新WHERE子句中使用的相同字段。从逻辑上讲,这两个字段包含相同的值,因此您只需要一个参数


要记住的最后一点是,在OleDb中,参数不是通过名称识别的,而是通过其在命令文本中的位置识别的。因此,请注意参数添加到参数集合的正确顺序

是什么让您相信“一次只能更新一个”?从代码的外观来看,似乎一次只能更新一列(字段)。(提示:这根本不是真的。)对不起,我的意思是,我一次只能更新一列,例如,我不能简单地将数据输入多个字段并让它们全部更新。感谢您的回答,但是正如我所说,我的编程技能非常基本,所以我希望您不介意我有几个问题。我将如何使用您给出的代码,将其集成到我自己的代码中,还是简单地替换我的代码?cmdText究竟是如何工作的?它做了什么?@user2092379另一个考虑事项:
UPDATE
将只更新数据库中的现有记录,而不会添加新记录。要添加新记录,您需要使用
INSERT
命令,该命令的语法与
UPDATE
命令稍有不同。@user2092379,cmdText是您的查询,没有要更新和搜索的值的字符串连接,因为占位符(?)将替换为Correspondent parameters集合中的值。此替换是由框架完成的,该框架更了解如何传递这些值(例如,文本框中的一个引号可能会破坏字符串连接)@user2092379,提供的代码应该替换您的所有代码。@Steve感谢您的解释。我已经尝试使用你在我的程序中给出的代码,但我有一些问题。using语句需要额外的括号,但我似乎无法将其放在解决问题的位置。oleDbconnection没有声明,我也不确定要将它们声明为什么。
cmd.Parameters.AddWithValue("@p3",Convert.ToDouble(heighttxt.Text))