С# .NET4.0 TableAdapter.Update() не будет вставлять новую запись

У меня есть небольшое приложение, состоящее из DAL, BLL и самого приложения в разных проектах в рамках одного решения в Visual Studio 2010.

Мой DAL использует файл xsd для запроса базы данных, а мой BLL имеет методы для получения информации из DAL и выполнения с ней действий.

В настоящее время я пытаюсь вставить запись, используя код приложения, чтобы вызвать метод в BLL, который затем пытается вставить запись с помощью метода Tableadapter.Update(), сгенерированного в файле xsd DAL.

Я уже могу без проблем выбирать и обновлять записи, но не могу вставлять записи.

Насколько я знаю, метод TableAdapter.Update() должен уметь вставлять новую запись, если я предоставлю ей новую строку, однако он возвращает значение 0, что означает, что были затронуты 0 строк, поэтому он не работает.

Таблица, в которую я пытаюсь вставить, называется tblRoles.

Он имеет столбец «ID», который представляет собой столбец int, первичного ключа и идентификатора. У него есть столбец «Имя», который принимает nvarchar (50), и он имеет 4 столбца «CanAdduser» и т. Д., Которые принимают битовый тип.

Вот мой код:

Код приложения позади:

protected void CreateRole(object sender, EventArgs e) {
    RolesBL roles = new RolesBL();

    roles.CreateRole(NewRoleName.Text);

    RolesGridView.DataBind();
}

БЛЛ:

private tblRolesTableAdapter adapter = new tblRolesTableAdapter();

public bool CreateRole(string Name) {
    CMSDS.tblRolesDataTable roles = new CMSDS.tblRolesDataTable();
    CMSDS.tblRolesRow row = roles.NewtblRolesRow();

    row.Name = Name;
    row.CanAddUsers = false;
    row.CanEditUsers = false;
    row.CanSuspendUsers = false;
    row.CanChangeUserPasswords = false;

    int result = adapter.Update(row);

    if(result == 1) {
        return true;
    }

    return false;
}

Насколько я понимаю, это должно вставить новую строку в таблицу, но adapter.Update(row) продолжает возвращать 0, и я не знаю, почему.

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

Любая помощь будет оценена по достоинству!

Изменить:

Я забыл упомянуть, что когда я настроил запрос Fill,GetData() по умолчанию в файле xsd, я убедился, что он автоматически генерирует операторы Insert, Update и Delete.


person Lucas    schedule 17.07.2011    source источник


Ответы (1)


Вы не добавили новую строку ролей в таблицу данных.

CMSDS.tblRolesDataTable roles = new CMSDS.tblRolesDataTable();
CMSDS.tblRolesRow row = roles.NewtblRolesRow();
row.Name = Name;
roles.AddtblRolesRow(row); 
int result = adapter.Update(roles); //the same as `adapter.Update(row)`
person Tim Schmelter    schedule 17.07.2011
comment
+1; это имеет больше смысла, чем мой ответ. Кажется, другие (одна таблица?) Примеры не вызывают AcceptChanges. - person Merlyn Morgan-Graham; 18.07.2011
comment
Великолепно! Вы избавили меня от многих разочарований :) Спасибо! Честно говоря, я не совсем понимал, как все это работает, поэтому я даже не знал о существовании метода Add~Row(). - person Lucas; 18.07.2011
comment
@Merlyn: adapter.Update будет неявно вызывать AcceptChanges. msdn.microsoft.com/en-us/ библиотека/ - person Tim Schmelter; 18.07.2011