【问题标题】:VB.Net - Add and save new row to database using InsertOnSubmitVB.Net - 使用 InsertOnSubmit 添加新行并将其保存到数据库
【发布时间】:2016-03-14 15:57:22
【问题描述】:

护士表(包含额外数据,但不必包含)

字段:ID、名称、启用

示例数据:1 - 测试护士 - 正确

我的问题:用户点击添加护士按钮,列表中添加了一名新护士,并且根据表格中的最后一个ID自动确定ID;但是,这在此特定块中不起作用,尽管相同的功能在同一程序的其他部分中起作用。

与问题相关的代码:

护士班

Partial Public Class Nurse

Private Sub Nurse_PropertyChanged(sender As Object, e As System.ComponentModel.PropertyChangedEventArgs) Handles Me.PropertyChanged
    Using database As New MaternityDatabaseDataContext
        Select Case e.PropertyName
            Case "First_Name"
                If Me.First_Name.Trim <> "" Then
                    database.ExecuteCommand("UPDATE Nurses SET First_Name = {0} WHERE TableID = {1}", Me.First_Name, Me.TableID)
                End If
            Case "Last_Name"
                If Me.Last_Name.Trim <> "" Then
                    database.ExecuteCommand("UPDATE Nurses SET Last_Name = {0} WHERE TableID = {1}", Me.Last_Name, Me.TableID)
                End If
            Case "Display_Name"
                If Me.Display_Name.Trim <> "" Then
                    database.ExecuteCommand("UPDATE Nurses SET Display_Name = {0} WHERE TableID = {1}", Me.Display_Name, Me.TableID)
                End If
            Case "Enabled"
                database.ExecuteCommand("UPDATE Nurses SET Enabled = {0} WHERE TableID = {1}", Me.Enabled, Me.TableID)
            Case "HomeNumber"
                If Me.HomeNumber.Trim <> "" Then
                    database.ExecuteCommand("UPDATE Nurses SET HomeNumber = {0} WHERE TableID = {1}", Me.HomeNumber, Me.TableID)
                End If
            Case "CellNumber"
                If Me.CellNumber.Trim <> "" Then
                    database.ExecuteCommand("UPDATE Nurses SET CellNumber = {0} WHERE TableID = {1}", Me.CellNumber, Me.TableID)
                End If
        End Select
    End Using
End Sub

End Class

包含 addButton 的 Nurse User Control 代码

Imports System.Collections.ObjectModel

Public Class NursesUserControl

Private NurseList As ObservableCollection(Of Nurse)

Public Sub New()
    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
    NurseList = New ObservableCollection(Of Nurse)
    NursesDataGrid.ItemsSource = NurseList
End Sub

Private Sub AddButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles AddButton.Click
    Dim employee As New Nurse
    employee.Enabled = True
    NurseList.Add(employee)

    'TODO: Change using statement below to use maternity brain.
    Using database As New MaternityDatabaseDataContext
        database.Nurses.InsertOnSubmit(employee)
        database.SubmitChanges()
    End Using
End Sub

Private Sub DisableButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles DisableButton.Click
    Dim selectedRow As Nurse = TryCast(NursesDataGrid.SelectedValue, Nurse)
    If selectedRow IsNot Nothing Then
        selectedRow.Enabled = False
    End If
End Sub

Private Sub EnableButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles EnableButton.Click
    Dim selectedRow As Nurse = TryCast(NursesDataGrid.SelectedValue, Nurse)
    If selectedRow IsNot Nothing Then
        selectedRow.Enabled = True
    End If
End Sub

Private Sub NursesDataGrid_CellEditEnding(sender As Object, e As System.Windows.Controls.DataGridCellEditEndingEventArgs) Handles NursesDataGrid.CellEditEnding
    ' Force update on datagrid cell changes instead of just row changes.
    Static isManualInit As Boolean = True
    If e.EditAction = DataGridEditAction.Commit And isManualInit = True Then
        isManualInit = False
        NursesDataGrid.CommitEdit(DataGridEditingUnit.Row, True)
        isManualInit = True
    End If
End Sub

Private Sub NursesUserControl_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded
    'TODO: Change using statement below to use maternity brain.
    Using database As New MaternityDatabaseDataContext
        For Each employee As Nurse In database.Nurses.OrderBy(Function(Nurse) (Nurse.Last_Name))
            If employee.Enabled = True Then
                NurseList.Add(employee)
            End If
        Next
    End Using
End Sub

End Class

我的错误:无法将空值插入护士表的 TableID 列。 为什么它不能根据 Nurses 表中的最后一个条目自动找到 TableID?任何帮助将不胜感激。

【问题讨论】:

    标签: sql .net wpf vb.net


    【解决方案1】:

    检查您的餐桌设计。听起来ID没有设置为身份。

    如果可以,请删除表并使用ID INT IDENTITY(1, 1) 重新创建它。

    如果无法删除,则必须手动获取代码中的下一个 ID。

    您可以获取有关身份here的更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 2012-03-07
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多