C # .NET4.0 TableAdapter.Update () не будет вставлять новую запись - PullRequest
0 голосов
/ 18 июля 2011

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

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

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

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

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

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

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

Вот мой код:

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

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

    roles.CreateRole(NewRoleName.Text);

    RolesGridView.DataBind();
}

BLL:

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.

1 Ответ

1 голос
/ 18 июля 2011

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

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)`
...