powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / как правильно обновить запись ?
13 сообщений из 13, страница 1 из 1
как правильно обновить запись ?
    #32375584
Organix2141
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть sqlDataAdapter1,dataSet11, DataGrid1
добавляю запись

dataSet11.Tables["таблица"].Rows.Add(new Object[] {зн поля 1,зн поля 1});

применяю изменения
dataSet11.Tables["authors"].AcceptChanges();

в итоге данные не записываются в базу
что не так?
...
Рейтинг: 0 / 0
как правильно обновить запись ?
    #32375598
maratic_net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DataSet.Update
...
Рейтинг: 0 / 0
как правильно обновить запись ?
    #32375611
Andr2141
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пошу заметить такого метода в DataSet е нет

пробовал
sqlDataAdapter1.Update(dataSet11,"authors")
тоже не катит
...
Рейтинг: 0 / 0
как правильно обновить запись ?
    #32375734
maratic_net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имелось ввиду DataAdapter.Update(DataSet) - но только сначала нужно правильно задать Insert/Update/Delete Commands in your DataAdapter... например при помощи CommandBuilder(если select был простым)
...
Рейтинг: 0 / 0
как правильно обновить запись ?
    #32375735
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кусочек MSDN

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SqlDataAdapter catDA = new SqlDataAdapter( "SELECT CategoryID, CategoryName FROM Categories" , nwindConn);       

catDA.UpdateCommand = new SqlCommand( "UPDATE Categories SET CategoryName = @CategoryName "  +
                                      "WHERE CategoryID = @CategoryID"  , nwindConn);

catDA.UpdateCommand.Parameters.Add( "@CategoryName" , SqlDbType.NVarChar,  15 ,  "CategoryName" );

SqlParameter workParm = catDA.UpdateCommand.Parameters.Add( "@CategoryID" , SqlDbType.Int);
workParm.SourceColumn =  "CategoryID" ;
workParm.SourceVersion = DataRowVersion.Original;

DataSet catDS = new DataSet();
catDA.Fill(catDS,  "Categories" );   

DataRow cRow = catDS.Tables[ "Categories" ].Rows[ 0 ];
cRow[ "CategoryName" ] =  "New Category" ;

catDA.Update(catDS);
...
Рейтинг: 0 / 0
как правильно обновить запись ?
    #32375740
Фотография hDrummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у вас, по всей видимости, нет в адаптере команды на обновление.
...
Рейтинг: 0 / 0
как правильно обновить запись ?
    #32399794
я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
я
Гость
есть два уровня обновления
1) обновление в DataSet, выполняется методом AcceptChanges()
2) обновление из DataSet в БД , выполняется sqlDataAdapter.Update(dataSet)

В отладке убедитесь что после AcceptChanges()
данные изменяются в DataSet , а после sqlDataAdapter.Update(dataSet) в БД
смотря при этом на sqlDataAdapter.UpdateCommand
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
как правильно обновить запись ?
    #35333632
Max80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как можно без запроса сделать обновление? Ведь по всему видно, что DataSet содержит всю информацию о струкруре и наборе данных серверной БД. Почему нельзя обновить DataSet и найти способ обновления БД, при котором база данных анализирует изменения, произошедшие в таблицах датасета и принимает эти изменения на свой счет. Или проще - это делает не БД, а на клиенте - с помощью какой-нить функции (короткой) без применения параметризованных запросов и без сложной логики обновления. Просто прога видет, что данные в таблице датасет изменились и меняет их в таблице БД. Почему так нельзя сделать? Пожалуйста, объясните начинающему.

До встречи, Yurfact
...
Рейтинг: 0 / 0
как правильно обновить запись ?
    #35333810
Фотография WYPMAH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max80А как можно без запроса сделать обновление? Ведь по всему видно, что DataSet содержит всю информацию о струкруре и наборе данных серверной БД.
ну ка расскажите мне, как это датаСет видит структуру БД, если на вход подать запрос с выборкой из вьюхи? ему и дела нет до вашей БД, пока вы сами ему все не распишите и не покажите, а к тому же, еще и сами все выполнять будите ;)

по вашему вопросу : либо метод Update адаптера, либо отдельный Command, да и вообще, особых проблем не вижу. Если приложение простецкое, что даже гриды представляют результат выборки одинарных таблиц, то тут адаптер-датаСет-коммандБилдер сделают свои дела на ура, если же выборки сложные, вьюхи, в которых участвует по 5-10 таблиц, то в такой ситуации запись не добавляется путем забивании данных в новой строке грида, для этих случаев создаются специализированные формочки заполнения всех необходимых данных, после выполняется Command и, затем, снова метод Fill, чтобы обновить данные в гриде.
...
Рейтинг: 0 / 0
как правильно обновить запись ?
    #35334072
Max80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь, загнался немного. Имел ввиду DataAdapter

Пробовал по Вашему совету с помощью SqlCommandBuilder:

Dim _daDovObl As SqlDataAdapter

Private Sub Frm_RtrNew_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

_daDovObl = DAFill(Me.DS, "DOVOBL") 'Me.DS - DataSet (на форме, но не типизирован), DOVOBL - таблица


'Здесь код по присвоения значений контролам
'...

End Sub

-----------------------------------------------------------------------------------------------------------


'А тепeрь присваиваем значения записям DataSet (в данном случае - из TreeView):
Private Sub TV_AfterLabelEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.NodeLabelEditEventArgs) Handles TV.AfterLabelEdit

Dim tn As TreeNode = Me.TV.SelectedNode
Dim dt As DataTable = PropertyNode(tn, mvPropertyTreeNodeClass.mvDataTable)
Dim tit As String = PropertyNode(tn, mvPropertyTreeNodeClass.mvNameColumnTitle)
Dim colId As String = PropertyNode(tn, mvPropertyTreeNodeClass.mvNameColumnId)
Dim id As Integer = PropertyNode(tn, mvPropertyTreeNodeClass.mvID)
Dim strRes As String = tn.Text

If FindAndUpdateRow(dt, colId, id, tit, strRes) = True Then MsgBox("Yes!!!")

End Sub


-----------------------------------------------------------------------------------------------------------

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
UpdateDA(Me.DS, "DOVOBL", _daDovObl)
End Sub

-----------------------------------------------------------------------------------------------------------

Public Function DAFill(ByVal Ds As DataSet, ByVal tblName As String, Optional ByVal strSQL As String = Nothing) _
As SqlDataAdapter

Dim stSQL As String

If IsNothing(strSQL) Then
stSQL = "SELECT * FROM " & tblName
Else
stSQL = strSQL
End If

Dim DA As New SqlDataAdapter(stSQL, OpenCnn.ConnectionString) 'Использую функцию подключения к БД (в ней храниться инфа о подключении,
'оторое может изменяться

DA.FillSchema(Ds, Source, tblName)
DA.Fill(Ds, tblName)

Return DA

End Function

-----------------------------------------------------------------------------------------------------------

Public Function FindAndUpdateRow(ByVal dt As DataTable, ByVal colId As String, ByVal id As Integer, _
ByVal colTit As String, ByVal strRes As String) As Boolean

Try
dt.PrimaryKey = New DataColumn() {dt.Columns(colId)}
Dim row As DataRow = dt.Rows.Find(id)

row(colTit) = strRes
row.AcceptChanges()

Return True

Catch ex As Exception
Return False

End Try
End Function

Но БД все равно не обнавляется. Почему?
...
Рейтинг: 0 / 0
как правильно обновить запись ?
    #35334083
Max80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А ЕЩЕ ЗАБЫЛ СКАЗАТЬ : ПОСЛЕ ОБНОВЛЕНИЕ ДАТАСЕТА ПРОВЕРИЛ - ДАННЫЕ ИЗМЕНИЛИСЯ, А ВОТ В БД ПОСЛЕ ВСЕХ ОПЕРАЦИЙ DA.UpdateCommand = Nothing
Т.е. по всему видно, что что-то с апдайтом

До встречи, Yurfact
...
Рейтинг: 0 / 0
как правильно обновить запись ?
    #35334296
Фотография WYPMAH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Max80А ЕЩЕ ЗАБЫЛ СКАЗАТЬ : ПОСЛЕ ОБНОВЛЕНИЕ ДАТАСЕТА ПРОВЕРИЛ - ДАННЫЕ ИЗМЕНИЛИСЯ, А ВОТ В БД ПОСЛЕ ВСЕХ ОПЕРАЦИЙ DA.UpdateCommand = Nothing
Т.е. по всему видно, что что-то с апдайтом
я в VB не силен, но даже так могу сказать, что не вижу вызова метода dataAdapter.Update.

вот пример из МСДНа как пользоваться билдером:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public static DataSet SelectSqlRows(string connectionString,
    string queryString, string tableName)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = new SqlCommand(queryString, connection);
        SqlCommandBuilder builder = new SqlCommandBuilder(adapter);

        connection.Open();

        DataSet dataSet = new DataSet();
        adapter.Fill(dataSet, tableName);

        //code to modify data in DataSet here
        builder.GetUpdateCommand();

        //Without the SqlCommandBuilder this line would fail
        adapter.Update(dataSet, tableName);

        return dataSet;
    }
}

про метод AcceptChanges(), что вы используете, можете также прочитать в МСДНе:

Код: plaintext
After verifying the accuracy of changes made to data in a DataTable, you can accept the changes using the AcceptChanges method of the DataRow, DataTable, or DataSet, which will set the Current row values to be the Original values and will set the RowState property to Unchanged. Accepting or rejecting changes clears out any RowError information and sets the HasErrors property to false. Accepting or rejecting changes can also affect updating data in the data source. For more information, see Updating Data Sources with DataAdapters (ADO.NET).

думаю, тут ясно сказано, что данные не обновляются на сервере БД, а именно в источнике данных.
...
Рейтинг: 0 / 0
как правильно обновить запись ?
    #35338957
Max80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос решен. Мешала строка row.AcceptChanges()

До встречи, Yurfact
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / как правильно обновить запись ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]