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

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

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

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

пробовал
sqlDataAdapter1.Update(dataSet11,"authors")
тоже не катит
...
Рейтинг: 0 / 0
14.01.2004, 14:16
    #32375734
maratic_net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно обновить запись ?
Имелось ввиду DataAdapter.Update(DataSet) - но только сначала нужно правильно задать Insert/Update/Delete Commands in your DataAdapter... например при помощи CommandBuilder(если select был простым)
...
Рейтинг: 0 / 0
14.01.2004, 14:16
    #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
14.01.2004, 14:18
    #32375740
hDrummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно обновить запись ?
А у вас, по всей видимости, нет в адаптере команды на обновление.
...
Рейтинг: 0 / 0
05.02.2004, 16:54
    #32399794
я
я
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно обновить запись ?
есть два уровня обновления
1) обновление в DataSet, выполняется методом AcceptChanges()
2) обновление из DataSet в БД , выполняется sqlDataAdapter.Update(dataSet)

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

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

по вашему вопросу : либо метод Update адаптера, либо отдельный Command, да и вообще, особых проблем не вижу. Если приложение простецкое, что даже гриды представляют результат выборки одинарных таблиц, то тут адаптер-датаСет-коммандБилдер сделают свои дела на ура, если же выборки сложные, вьюхи, в которых участвует по 5-10 таблиц, то в такой ситуации запись не добавляется путем забивании данных в новой строке грида, для этих случаев создаются специализированные формочки заполнения всех необходимых данных, после выполняется Command и, затем, снова метод Fill, чтобы обновить данные в гриде.
...
Рейтинг: 0 / 0
25.05.2008, 22:27
    #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
25.05.2008, 22:41
    #35334083
Max80
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно обновить запись ?
А ЕЩЕ ЗАБЫЛ СКАЗАТЬ : ПОСЛЕ ОБНОВЛЕНИЕ ДАТАСЕТА ПРОВЕРИЛ - ДАННЫЕ ИЗМЕНИЛИСЯ, А ВОТ В БД ПОСЛЕ ВСЕХ ОПЕРАЦИЙ DA.UpdateCommand = Nothing
Т.е. по всему видно, что что-то с апдайтом

До встречи, Yurfact
...
Рейтинг: 0 / 0
26.05.2008, 08:52
    #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
28.05.2008, 02:13
    #35338957
Max80
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно обновить запись ?
Вопрос решен. Мешала строка row.AcceptChanges()

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


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