Обновление таблицы SQL-сервера с помощью vb.net 2010 datagridview

У меня возникли проблемы с обновлением моей таблицы базы данных с помощью datagridview, я читал какую-то ветку о проблеме, и в моем случае ничего не работает. Вот код, который я использую при заполнении datagridview.

    Public Sub filldatagridserver(ByRef SQL As String, ByRef dg As DataGridView)
    Dim myDataset As DataSet = New DataSet
    myAdptr.SelectCommand = New SqlCommand(SQL, cnSQL)
    myAdptr.Fill(myDataset)

    dg.DataSource = myDataset.Tables(0)
    dg.AutoResizeColumns()

    myAdptr.Dispose()
    myDataset.Dispose()
    cnSQL.Close()

    End Sub

затем я вызываю эту подпроцедуру с кодом ff:

    Call filldatagridserver("SELECT * FROM tblQuarterCollection", dgQuarter)

я уже использовал myAdptr.update, но я продолжаю получать ошибку о сопоставлении таблиц и т. д. Я также пытался процитировать удаление и закрытие в этой подпроцедуре, но это все еще не работает.

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


person Hideki    schedule 17.02.2014    source источник
comment
Будет полезно увидеть код, который вызывает обновление, однако, если вы уничтожите адаптер, вы не сможете ничего обновить с его помощью.   -  person Steve    schedule 17.02.2014
comment
@steve это то, что я использую при обновлении. myAdptr.Update(myDataset, tblPayMTC)   -  person Hideki    schedule 17.02.2014
comment
Затем добавьте имя таблицы также при заполнении набора данных myAdptr.Fill(myDataset, tblPayMTC). Еще одним важным моментом для работы автоматического обновления является наличие первичного ключа, возвращаемого запросом SELECT. Был ли у вас определен первичный ключ для вашей таблицы?   -  person Steve    schedule 17.02.2014


Ответы (3)


попробуй это :

 Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
Dim addcmd as new sqlcommand("INSERT INTO TableName VALUES(@col1,@col2)",YourConnectionString)
addcmd.parameters.addwithvalue("@col1",txtCol1.text)
addcmd.parameters.addwithvalue("@col2",txtCol2.text)
addcmd.executenonQuery


End Sub
person Unknownymous    schedule 17.02.2014
comment
привет @Unknownymous, я не могу понять, куда поместить твой код - person Hideki; 18.02.2014

Наконец-то мне удалось заставить мой код работать. Я проверил свою базу данных и сбросил первичный ключ, и теперь он работает отлично.

person Hideki    schedule 18.02.2014

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

myAdptr.SelectCommand = New SqlCommand(SQL, cnSQL)
myAdptr.Fill(myDataset, "tblPayMTC")

Другим важным моментом для работы автоматического обновления является наличие первичного ключа, возвращаемого запросом SELECT, в противном случае вам потребуется написать свои собственные команды для UpdateCommand, InsertCommand и DeleteCommand экземпляра SqlDataAdapter.

первичный ключ – это столбец в вашей таблице tblQuarterCollection, который однозначно идентифицирует ваши записи. (обычно столбец идентификатора с установленным значением «Идентификация»), но это также может быть группа столбцов, которые вместе работают как первичный ключ.
Хотя столбец с этим свойством не является обязательным, настоятельно рекомендуется Имеется

person Steve    schedule 17.02.2014
comment
спасибо за ответ, у вас есть пример кода, как вручную написать команду обновления/вставки/удаления для адаптера? - person Hideki; 17.02.2014
comment
Нет, это зависит от вашей таблицы INSERT INTO table (список полей) VALUES (список параметров) то же самое для UPDATE, но это не требуется, если у вас есть первичный ключ, определенный в таблице (как и должно быть) - person Steve; 17.02.2014
comment
привет, извините, я отсутствовал некоторое время. Я установил первичный ключ, но все еще получаю сообщение об ошибке. Для обновления требуется допустимая команда UpdateCommand при передаче коллекции DataRow с измененными строками. ЕСЛИ я использую команду обновления SQL, какие параметры следует установить? значение каждой ячейки в datagridview? будет ли он автоматически увеличиваться для каждой строки? - person Hideki; 18.02.2014
comment
Я читал о построителе команд, поэтому я использовал его в кнопке обновления (Dim cb = New SqlCommandBuilder (myAdptr)). теперь я получил новую ошибку. Генерация динамического SQL для UpdateCommand не поддерживается для SelectCommand, который не возвращает информацию о ключевом столбце. - person Hideki; 18.02.2014
comment
Как я уже сказал, в вашей таблице должен быть столбец, обозначенный как первичный ключ, и этот столбец должен быть возвращен оператором SELECT, иначе невозможно обновить или удалить что-либо из вашей таблицы. - person Steve; 18.02.2014