-2

下面的代码没有错误但更新值不存储在数据库中???它是更新数据库值的正确方法???

Try

        da = New SqlDataAdapter("SELECT * FROM studentdetails where student_id= @id", myConn)
        da.SelectCommand.Parameters.AddWithValue("@id", txt_id.Text)
        da.Fill(dset, "studentdetails")

        If dset.Tables("studentdetails").Rows(0)("student_id") = Convert.ToInt32(txt_id.Text) Then
            dset.Tables("studentdetails").Rows(0)("student_name") = txt_name.Text
            dset.Tables("studentdetails").Rows(0)("student_branch") = txt_branch.Text
            dset.Tables("studentdetails").Rows(0)("student_class") = txt_class.Text
            MsgBox("Update Complete")
        Else
            MsgBox("Record not found")
        End If

    Catch ex As Exception
        MsgBox(ex.Message)
    Finally

        myConn.Close()
    End Try
4

2 回答 2

2

首先,如果要更新记录,则无需选择记录。因此,我将使用 aSqlCommand和适当的 update-sql。然后使用它的ExecuteNonQuery方法。

其次,由于您将 ID 转换为Int32我假设数据库中列的类型也是int. 但是您将string参数传递SelectCommandDataAdapter. 请注意,AddWithValue尝试从值推断类型,因此您应该提供正确的类型。

但是,如果您想使用 aSqlDataAdapter来更新记录,您必须提供UpdateCommand. 然后,当您调用时,DataTable/DataSet 中的所有更改都将写入数据库DataAdapter.Update

这是一个示例(同样,选择是多余且低效的,因为您可以直接使用 更新SqlCommand.ExecuteNonQuery):

Try
   Dim id As Int32
   If Not Int32.TryParse(txt_id.Text, id) Then
        MsgBox("Please enter a valid ID!")
        Return
    End If

    Using myConn = New SqlConnection("Connection String")
        Using da = New SqlDataAdapter("SELECT * FROM studentdetails where student_id= @id", myConn)
            Dim table = New DataTable()
            da.SelectCommand.Parameters.AddWithValue("@id", id)
            da.Fill(table)
            If table.Rows.Count = 0 Then
                MsgBox("Record not found")
            Else
                da.UpdateCommand = New SqlCommand("UPDATE studentdetails SET student_id=@student_id,student_name=@student_name,student_branch=@student_branch,student_class=@student_class WHERE student_id=@id", myConn)
                da.UpdateCommand.Parameters.AddWithValue("@id", id)
                da.UpdateCommand.Parameters.AddWithValue("@student_name", txt_name.Text)
                da.UpdateCommand.Parameters.AddWithValue("@student_branch", txt_branch.Text)
                da.UpdateCommand.Parameters.AddWithValue("@student_class", txt_class.Text)

                Dim row = table.Rows(0)
                row.SetField("student_id", Int32.Parse(txt_id.Text))
                row.SetField("student_name", txt_name.Text)
                row.SetField("student_branch", txt_branch.Text)
                row.SetField("student_class", txt_class.Text)

                da.Update(table)
            End If
        End Using
    End Using
Catch ex As Exception
    MsgBox(ex.Message)
Finally
    'You don't need to close the connection if you use the using-statement
    'myConn.Close()
End Try
于 2013-08-25T19:57:03.483 回答
1

要将某些内容存储在数据库中,您需要这样的 INSERT 命令

Dim cmdInsert = "INSERT INTO studentdetails (student_id, student_name, " & _
                "student_branch, student_class) VALUES " & _
                "(@id, @name, @branch, @class)"
Dim cmd = new SqlCommand(cmdInsert,myConn) 
cmd.Parameters.AddWithValue("@id",Convert.ToInt32(txt_id.Text)(
cmd.Parameters.AddWithValue("@name", txt_name.Text)
cmd.Parameters.AddWithValue("@branch", txt_branch.Text)
cmd.Parameters.AddWithValue("@class", txt_class.Text)
Dim rowsInserted = cmd.ExecuteNonQuery()
if rowsInserted = 1 Then
   MsgBox("Record inserted")
Else
   MsgBox("Error inserting Record")
End If

当然,这会尝试在数据库中插入一条新记录。要更新现有记录,您需要一个 UPDATE 命令。也许最好快速回顾一下各种 SQL 命令

于 2013-08-25T19:52:31.020 回答