[ADO.NET] Можно ли использовать один DataProvider для N таблиц?
ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_raddata/html/c9970150-b71b-4c9d-a355-5efb6b510dca.htm
и там ничего не сказано, как можно их получить сначала, чтоб сразу 3 или 4 штуки прочитать вместе со связями
нашёл про несколько уже готовых взаимосвязанных, не нашёл заполнение
Или я чего то не понимаю?
вопрос в том, как заполнить DataSet несколькими связаными таблицами одной БД сохранив связи
ValidateConnection;
this.AuthorizationInfo.RequestAccess(this.sqlConnection, AccessLevel.HeadTeacher);
ClassCollection classes = classCollectionContainer.GetData;
DataSetReport result = new DataSetReport;
string param = GetParam(classes);
this.sqlDataAdapterClasses.SelectCommand.CommandText = "SELECT * FROM Classes WHERE Id IN " + param;
this.sqlDataAdapterStuts.SelectCommand.CommandText = "SELECT * FROM Stuts stut INNER JOIN StutsToClasses s2c ON s2c.StutId = stut.Id WHERE s2c.ClassId IN " + param;
this.sqlDataAdapterStutsToClasses.SelectCommand.CommandText = "SELECT * FROM StutsToClasses WHERE ClassId IN " + param;
this.sqlDataAdapterSubjects.SelectCommand.CommandText = "SELECT DISTINCT subject.* FROM Subjects subject INNER JOIN Groups gr ON gr.SubjectId = subject.Id WHERE gr.ClassId IN " + param;
this.sqlDataAdapterGroups.SelectCommand.CommandText = "SELECT * FROM Groups WHERE ClassId IN " + param;
this.sqlDataAdapterJournalEvents.SelectCommand.CommandText = "SELECT je.* FROM JournalEvents je INNER JOIN Groups gr ON gr.Id = je.GroupId WHERE gr.ClassId IN " + param;
this.sqlDataAdapterJournalGrades.SelectCommand.CommandText = "SELECT jg.* FROM JournalGrades jg INNER JOIN JournalEvents je ON je.Id = jg.EventId INNER JOIN Groups gr ON gr.Id = je.GroupId WHERE gr.ClassId IN " + param;
this.sqlDataAdapterClasses.Fill(result.Classes);
this.sqlDataAdapterStuts.Fill(result.Stuts);
this.sqlDataAdapterStutsToClasses.Fill(result.StutsToClasses);
this.sqlDataAdapterSubjects.Fill(result.Subjects);
this.sqlDataAdapterGroups.Fill(result.Groups);
this.sqlDataAdapterJournalEvents.Fill(result.JournalEvents);
this.sqlDataAdapterJournalGrades.Fill(result.JournalGrades);
return new DataSetReportContainer(result);
Записывать обратно, полагаю, в обратном порядке. DataSetReport генерируется автоматически из описания таблиц, полученного вижуалстудией непосредственно у базы данных, там где-то есть визард на эту тему.
Записывать обратно, полагаю, в обратном порядке.нет, при записи данных обратно в базу из датасета надо разделять (с помощью метода DataTable.Select(null, .. удаленные, новые и обнавленные записи, в мсдне есть об этом статья. Но в ней не учитывается ситуация, когда поле внешнего ключа (FK) может содержать NULL -ы (хотя эта ситуация редка и ее стоит избегать). В общем случае у меня получилась вот такая последовательность обновлений
Child.Update.ValueFKFieldNull
Child.Delete.All
Parent.Delete.All
Parent.Update.All
Parent.Insert.ValueFKFieldNotNull
Child.Update.All
Child.Update.All
DataSetReport генерируется автоматически из описания таблиц, полученного вижуалстудией непосредственно у базы данных, там где-то есть визард на эту тему.автор треда хотел получать связи автоматически из БД, вижуалстудия этого не делает.
Как за одину операцию с помощью DataAdapter заполнить сразу три таблицы DataSet'а, взяв данные из одной БД? Или же вовсе не обязательно, чтобы таблицы эти были получены одним датаадептером?
SqlConnection cn = new SqlConnection("....");
SqlDataAdapter a = new SqlDataAdapter("select * from table1; select * from table2; select * from table3;",cn);
DataSet ds = new DataSet;
try
{
a.Fill(ds);
}
catch(Exception ex)
{
....
}
заполняет ds тремя таблицами ...
Насчёт a.Update(ds) - хз, ломает думать над соответствующими Insert Update и Delete командами адаптера.
Оставить комментарий
agaaaa
т.е. скопировать в некий DataSet несколько таблиц БД, поработать с ними и залить обратно изменения.судя по заголовкам методов DataAdaptera, он это умеет. только не очень понятно, как именно.
если можно - кусок кода-примера