0

我正在尝试使用 VB.NET 2010 进行数据访问。

我正在慢慢构建一个虚拟的联系人应用程序。我让它使用 SQL 命令对象来处理 ADD、UPDATE 和 DELETE,但它只支持单表查询。我知道如果有连接,我必须手动设置命令,但不确定如何。

这是我当前的代码,它从联系人表和联系人类型表中检索数据

    Private Sub frmContacts_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    Try
        bloading = True 'variable to denote form is loading
        ModMain.InitaliseDBConnection() ' open connection to database using public connection "cn"

        sqlAdapter = New SqlDataAdapter(sSqlContactsJoined, cn)
        sqlAdapter.Fill(datblContacts) 'fill datatable with result of sSqlContactsJoined
        CmdBuilder = New SqlCommandBuilder(sqlAdapter) 'generate the ADD, UPDATE and DELETE statements

        dgrdContacts.DataSource = datblContacts
        FormatGrid() 'Set the headers and hide ID columns on datagrid
        FillComboBox() 'fill combobox with ContactTypes
        bloading = False
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try

End Sub

sSqlContactsJoined 的值为:

Dim sSqlContactsJoined As String = "SELECT dbo.tblContacts.*, dbo.tblContactType.ContactType FROM " _
                                & " dbo.tblContacts INNER JOIN dbo.tblContactType ON dbo.tblContacts.ContactTypeID = dbo.tblContactType.ContactTypeID"

任何指向可能向我展示如何手动输入 CommandBulder 的 ADD UPDATE 和 DELETE 语句的教程的指针?

4

1 回答 1

2

如果您的查询包含连接,那么您根本不使用命令生成器。您必须创建SqlCommand对象并将它们显式分配给数据适配器 的InsertCommand,UpdateCommand和属性,例如DeleteCommand

Private connection As New SqlConnection("connection string here")
Private adapter As New SqlDataAdapter("SELECT ID, Name, Quantity, Unit FROM StockItem", _
                                      connection)
Private table As New DataTable

Private Sub InitialiseDataAdapter()
    Dim delete As New SqlCommand("DELETE FROM StockItem WHERE ID = @ID", Me.connection)
    Dim insert As New SqlCommand("INSERT INTO StockItem (Name, Quantity, Unit) VALUES (@Name, @Quantity, @Unit)", Me.connection)
    Dim update As New SqlCommand("UPDATE StockItem SET Name = @Name, Quantity = @Quantity, Unit = @Unit WHERE ID = @ID", Me.connection)

    delete.Parameters.Add("@ID", SqlDbType.Int, 4, "ID")

    insert.Parameters.Add("@Name", SqlDbType.VarChar, 100, "Name")
    insert.Parameters.Add("@Quantity", SqlDbType.Float, 8, "Quantity")
    insert.Parameters.Add("@Unit", SqlDbType.VarChar, 10, "Unit")

    update.Parameters.Add("@Name", SqlDbType.VarChar, 100, "Name")
    update.Parameters.Add("@Quantity", SqlDbType.Float, 8, "Quantity")
    update.Parameters.Add("@Unit", SqlDbType.VarChar, 10, "Unit")
    update.Parameters.Add("@ID", SqlDbType.Int, 4, "ID")

    Me.adapter.DeleteCommand = delete
    Me.adapter.InsertCommand = insert
    Me.adapter.UpdateCommand = update

    Me.adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
End Sub

Private Sub GetData()
    'Retrieve the data.'
    Me.adapter.Fill(Me.table)

    'The table can be used here to display and edit the data.'
    'That will most likely involve data-binding but that is not a data access issue.'
End Sub

Private Sub SaveData()
    'Save the changes.'
    Me.adapter.Update(Me.table)
End Sub
于 2014-06-20T08:08:52.677 回答