Заполнение предварительно созданных несвязанных столбцов таблицы данных во время выполнения - PullRequest
0 голосов
/ 02 июня 2019

У меня есть DataGridView с несвязанными данными, когда я запускаю приведенный ниже код, он создает новые столбцы помимо уже существующих. Что мне нужно сделать, чтобы этого не случилось?

    Dim connection2 As SqlConnection
    connection2 = New SqlConnection(clVariables.dbTestConnectionString)
    Dim CMD As New SqlCommand("DoGetSomething")
    Dim adapter As New SqlDataAdapter(CMD)

    CMD.Connection = connection2
    CMD.CommandType = CommandType.StoredProcedure
    CMD.Parameters.AddWithValue("@ID", SqlDbType.VarChar).Value = 1

    Dim ds As Data.DataSet = New Data.DataSet
    adapter.Fill(ds)
    dbtTableTmp.DataSource = ds.Tables(0)
    dbtTableTmp.ReadOnly = True
    dbtTableTmp.Refresh()

1 Ответ

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

Использование ... Конец Использование блоков гарантирует, что ваши объекты базы данных будут закрыты и расположены даже в случае ошибки.

Вы можете передать соединение непосредственно в конструктор команды вместе с именемхранимая процедура.

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

Второй параметр .AddWithValue - это значение, которое будет добавлено в базу данных.Вы смешиваете .Add с .AddWithValue.Метод .Add предпочтителен по нескольким причинам.Здесь есть еще одна проблема.Тип данных не может быть VarChar, а значение 1. 1 является целым числом, а VarChar является строкой.Я догадался. Но проверить базу данных, чтобы увидеть, что правильно.

Следуйте указаниям @Jimi, приведенным в комментариях.

Private Sub FillGrid()
    Dim dt As New DataTable
    Using connection2 As New SqlConnection(clVariables.dbTestConnectionString)
        Using CMD As New SqlCommand("DoGetSomething", connection2)
            CMD.CommandType = CommandType.StoredProcedure
            CMD.Parameters.Add("@ID", SqlDbType.Int).Value = 1
            connection2.Open()
            dt.Load(CMD.ExecuteReader)
        End Using
    End Using
    dbtTableTmp.DataSource = dt
    dbtTableTmp.ReadOnly = True
    dbtTableTmp.Refresh()
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...