Я знаю, что это глупый вопрос, и я чувствую себя так глупо , но я не могу найти правильный (простой) способ выполнить мою задачу.
У меня есть база данных Access, импортированная вVisual Studio 2010 для проекта C #: VS создает для меня (спасибо !!) набор данных со строгим контролем типов для моей базы данных.Отлично.
Затем в своем приложении я создаю новый экземпляр этого набора данных CDS ds = new CDS();
и добавляю записи в его таблицы.Наконец я делаю ds.AcceptChanges();
, но ничего не происходит на БД.
ОК, я погуглил гадость и думаю (понимаете?!?) Я должен открыть соединение БД, создать DataAdapter и заполнить свой набор данных этим:
CDS ds = new CDS();
OleDbConnection conn = new OleDbConnection(path_to_db);
conn.Open();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM mytable", conn);
da.Fill(ds.Editori); //Editori is a TableTable created automatically
// Insert rows in dataset
if (ds.HasChanges()) ds.AcceptChanges();
int ret = da.Update(ds.Editori);
Debug.Print("Update() returns: {0}", ret);
conn.Close();
но ret = 0 и в базе данных ничего не происходит, в то время как в DS.Editori у меня есть 106 строк !!
Чтобы завершить мое отчаяние: таблица mytable имеет поле автоинкремента какосновной ключ;когда я загружаю ds с помощью da, это поле корректно для каждой записи, но когда я вставляю строки в ds, записи имеют -1, -2, -3 и т. д. Почему?
Может кто-то подскажет мнеправильный способ работы со строго типизированными наборами данных?Я собираюсь учиться, читать книги, обещаю, но теперь я опаздываю на эту работу ... Спасибо
ОБНОВЛЕНИЕ:
Как предложено в Dev-Express, я создал вкладышкоманда, но результат тот же: когда я обновляю da, на базе данных ничего не происходит.
OleDbCommand cmd = new OleDbCommand(
"INSERT INTO Editori (ID,Editore) VALUES(?,?)", conn);
cmd.Parameters.Add("@ID", OleDbType.Integer);
cmd.Parameters.Add("@Editore", OleDbType.VarChar, 255, "Editore");
da.InsertCommand = cmd;
int ret = da.Update(ds.Editori);
Debug.Print("Update() returns: {0}", ret);
conn.Close();
ДРУГОЕ ОБНОВЛЕНИЕ: Я решил проблему с первичными ключами: в сгенерированном классе у меня было вручнуюизменить все эти строки:
this.columnID.AutoIncrementSeed = 1; // It was -1
this.columnID.AutoIncrementStep = 1; // It was -1