Заполнение базы данных SQL Server ранее существующей таблицей данных и полями (FORM). НЕТ файла базы данных - PullRequest
0 голосов
/ 11 июня 2019

Вот мое общее понимание базы данных из того, что я до сих пор читал: Сохранить / Обновить / Удалить в существующий ранее созданный файл, который связывается для формирования через SQL.

Вот что я пытаюсь сделать -У меня есть готовая таблица данных в форме со всеми определенными столбцами.Как только приложение закрыто или некоторые функции запущены, мне нужно, чтобы эти данные были сохранены / обновлены в SQL (локально).Когда приложение будет открыто, мне нужно сохранить все эти данные.

До сих пор я НЕ нашел ни одного решения для этого, где бы ни упоминалось о привязке к существующему файлу.Когда я работал с Excel, ячейки передачи данных должны были быть определены и указаны в форме для населения.

Я предполагаю, что при использовании базы данных из VB.NET таблица со значениями может быть автоматически сохранена / загружена / обновлена.Однако это только мое предположение, поскольку я никогда раньше не работал с SQL.Я не уверен, что мне нужно управлять созданным файлом базы данных со всеми значениями, а затем связать их с таблицей данных.Например, ячейка DataTable XX для столбца базы данных XX.

Вот что я сделал до сих пор, я создал базу данных и добавил в свой проект.Я пробовал несколько кодов и продолжаю получать Dataset Empty, хотя в таблице есть данные. Я также пытался использовать DataTable, но пока ничего не получалось.

Пожалуйста, подскажите, что я делаю неправильно, также будет полезна дополнительная информация о базах данных.Как и в предыдущем случае, я знаю, как работает привязка, когда существует файл.Но создание и управление меня смущает, так как я продолжаю думать, что должен быть файл привязки.

 Dim connetionString As String
 Dim sqlCnn As SqlConnection
 Dim sqlCmd As SqlCommand
 Dim adapter As New SqlDataAdapter
 Dim ds As New DataSet

 Dim sql As String

    connetionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Data_Ant.mdf;Integrated Security=True;Connect Timeout=30"
    sql = "SELECT BN FROM DataTable" ' BN is my column name and DataTable is the name of my Table where data gets populated. This is also confusing to me How does it know which value is what? Is there are space/word/characters requirements? 
    ' adapter.TableMappings.Add("DataTable", sql)

    If ds.Tables.Count > 0 Then
        sqlCnn = New SqlConnection(connetionString)
        Try
            sqlCnn.Open()
            sqlCmd = New SqlCommand(sql, sqlCnn)
            adapter.SelectCommand = sqlCmd
            adapter.Update(ds)
            adapter.Dispose()
            sqlCmd.Dispose()
            sqlCnn.Close()
        Catch ex As Exception
            MsgBox("Can not open connection !" & vbCrLf & Err.Description)
        End Try
    ElseIf ds.Tables.Count = 0 Then
        MsgBox("Empty data")
    End If
End Sub

Код, который я использую для создания / сохранения базы данных.Как и в предыдущем случае, все столбцы / форматы предварительно сделаны, загружены.

    Dim connetionString As String
    Dim sqlCnn As SqlConnection
    Dim sqlCmd As SqlCommand
    Dim adapter As New SqlDataAdapter
    Dim ds As New DataSet

    Dim sql As String

    connetionString = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Data_Ant.mdf;Integrated Security=True;Connect Timeout=30"
    sql = "Select BN FROM DataTable" 
    adapter.TableMappings.Add("BN", sql)


    If DataTable.RowCount > 0 Then
        sqlCnn = New SqlConnection(connetionString)
        Try
            sqlCnn.Open()
            sqlCmd = New SqlCommand(sql, sqlCnn)
            adapter.SelectCommand = sqlCmd
            adapter.Update(ds, "BN")

            adapter.Dispose()
            sqlCmd.Dispose()
            sqlCnn.Close()
        Catch ex As Exception
            MsgBox("Can not open connection !" & vbCrLf & Err.Description)
        End Try
    ElseIf DataTable.RowCount = 0 Then
        MsgBox("Empty data")
    End If
End Sub 

См. Дополнительную информацию ниже:

  • Столбцы / формат таблицы данных структурированы для визуального представления.
  • При запуске пользователя база данных приложения может быть пустой / может содержать значения.
  • Когда пользователь запускает определенную функцию Закрытие Значения приложения сохраняются и только значения.Если бы я использовал MS Access, я бы структурировал ту же таблицу / значения и сопоставил бы ее со значениями формы.Значения формы приходят из внешнего источника, а Format / Qty всегда известен.Надеюсь, это поможет мне лучше взглянуть на мою проблему.Возможно, SQL не правильный выбор для меня?Нужно ли строить SQL перед манипулированием значениями.

ОБНОВЛЕНИЕ: Я избавился от ошибки Invalid Object.Стол должен был быть создан 1-й, как я изначально думал.Тем не менее, мой DataSet всегда появляется как ПУСТОЙ, когда я пытаюсь сохранить ... Ячейки содержат данные BN как "1,2, ....). Даже если удалить I, если логика" Сохранить "таблица Сохранить и загрузить выходит пустымЧто-то действительно загружается, потому что, когда я пытаюсь добавить BN, он говорит мне обязательный бла-бла-бла (другая проблема)

КОД:

Private Sub SaveData()

    Dim connetionString As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Data_Ant.mdf;Integrated Security=True;Connect Timeout=30"
    Dim sql As String = "SELECT BN FROM DataTable_d"
    Dim sqlCnn As SqlConnection
    Dim sqlCmd As SqlCommand
    Dim adapter As New SqlDataAdapter
    Dim ds As New DataSet()

    adapter.TableMappings.Add("BN", sql)

    If ds.Tables.Count > 0 Then
        sqlCnn = New SqlConnection(connetionString)
        Try
            sqlCnn.Open()
            sqlCmd = New SqlCommand(sql, sqlCnn)
            adapter.SelectCommand = sqlCmd
            adapter.Update(ds, "BN")

            adapter.Dispose()
            sqlCmd.Dispose()
            sqlCnn.Close()
        Catch ex As Exception
            MsgBox("Can not open connection !" & vbCrLf & Err.Description)
        End Try
    ElseIf ds.Tables.Count = 0 Then
        MsgBox("Empty data")
    End If
End Sub

ОБНОВЛЕНИЕ: У меня все работает, но я могусохранить несколько строк ..... Неужели можно использовать некоторую помощь

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

В вашем запросе SQL удалите WHERE DataTable ='.Это утверждение ищет имя столбца DataTable, которое, я полагаю, не существует.Предложение WHERE используется для фильтрации вашего запроса.Вы используете WHERE только для имен столбцов в вашей таблице.

Например:

SELECT BN FROM DataTable

вернет все значения из столбца BN из DataTable.

Обратите внимание, что если выиметь несколько столбцов, вышеупомянутый запрос будет по-прежнему только возвращать значения из BN.

SELECT * FROM DataTable

будет возвращать каждое значение в DataTable.

Полезный сайт для просмотра документации по SQL - w3schools .

0 голосов
/ 11 июня 2019

Давайте начнем с отображения некоторых данных.Добавьте DataGridView в форму.Вы можете вызвать LoadData () с помощью кнопки.Я не очень уверен в вашей строке подключения, но попробуйте.

Private dt As DataTable
Private sql As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Data_Ant.mdf;Integrated Security=True;Connect Timeout=30"

Private Sub LoadData()
    '***EDIT***  Add instantiation line
    dt = New DataTable()
    'The Using...End Using blocks will close and dispose your database objects
    'even if there is an error
    Using cn As New SqlConnection(sql)
        'You can pass the command text and the connection directly to the constructor
        'In the select statement use the actual names of the field and table as they appear in the database.
        Using cmd As New SqlCommand("Select BN From [Insert the name of the table in the database]", cn)
            cn.Open()
            dt.Load(cmd.ExecuteReader)
        End Using
    End Using
    DataGridView1.DataSource = dt
End Sub

Это самый простой способ отображения данных.Мы продолжим изменять данные, как только это сработает.Если вы получите сообщение об ошибке cn.Open(), нам нужно будет работать со строкой подключения.

**** РЕДАКТИРОВАТЬ ****

Private Sub TestConnection()
    Dim sql As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Data_Ant.mdf;Integrated Security=True;Connect Timeout=30"
    Using cn As New SqlConnection(sql)
        cn.Open()
    End Using
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...