ASP.NET вставка из bll в mysql - PullRequest
0 голосов
/ 25 мая 2009

Я пытаюсь сделать вставку в базу данных MySql, используя трехслойное решение (или как его можно назвать).

Я делал это иногда с базой данных MS-sql, и она работала очень хорошо.

Но теперь, когда я пытаюсь сделать вставку, я получаю, что ID не может быть нулевым. Я думал, что база данных позаботилась об этом. Если я напишу вставку прямо в коде и использую MySqlCommand и executeNonQuery, это прекрасно работает.

Разве нельзя использовать BLL и DAL с MySql?

Сообщение об ошибке:

System.Data.NoNullAllowedException: столбец GiftID не допускает нулевые значения. в System.Data.DataColumn.CheckNullable (строка DataRow) в System.Data.DataColumn.CheckColumnConstraint (строка DataRow, действие DataRowAction) в System.Data.DataTable.RaiseRowChanging (аргументы DataRowChangeEventArgs, системный объект DataRow, функция DataRowEctionEctionE). .Data.DataTable.SetNewRecordWorker (строка DataRow, предлагаемое Int32 действие, действие DataRowAction, логическое значение isInMerge, позиция Int32, логическое значение fireEvent, исключение и deferredException) в System.Data.DataTable.InsertRow (строка DataRow, предложенное значение Int32, огонь Int32E в точке Boost) System.Data.DataRowCollection.Add (строка DataRow) в PayEx.payexusersDataTable.AddpayexusersRow (строка payexusersRow) в c: \ Users \ IT \ AppData \ Local \ Temp \ Временные файлы ASP.NET \ payex \ 45bd406a \ 10c84208 \ App_jqo.q .1.cs: строка 444 в PayExBLL.AddPayExUser (Имя строки, Имя строки, Строковая компания, Адрес строки, Строка Zip, Строка, Телефон строки, Строковая электронная почта, Байт ContactMe, UInt32 Сумма, UInt32 TransactionNumber, Байт анонимный, Строка Cu rrency) в c: \ Users \ IT \ Documents \ Visual Studio 2008 \ WebSites \ payex \ App_Code \ BLL \ PayExBLL.cs: строка 66 в _Default.btn_next3_Click (отправитель объекта, EventArgs e) в c: \ Users \ IT \ Documents \ Visual Studio 2008 \ WebSites \ payex \ Default.aspx.cs: строка 191

Мой код:

[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Insert, true)]
public bool AddPayExUser(string Firstname, string Lastname, string Company, string Address, string Zip, string City, string Phone, string Email, byte ContactMe, uint Amount, uint TransactionNumber, byte Anonymous, string Currency)
{
    PayEx.payexusersDataTable puTable = new PayEx.payexusersDataTable();
    PayEx.payexusersRow puRow = puTable.NewpayexusersRow();

    puRow.Firstname = Firstname;
    puRow.Lastname  = Lastname;
    puRow.Company = Company;
    puRow.Address = Address;
    puRow.Zip = Zip;
    puRow.City = City;
    puRow.Phone = Phone;
    puRow.Email = Email;
    puRow.ContactMe = ContactMe;
    puRow.Amount = Amount;
    puRow.TransactionNumber = TransactionNumber;
    puRow.Anonymous = Anonymous;
    puRow.Currency = Currency;


    puTable.AddpayexusersRow(puRow);
    int rowsAffected = Adapter.Update(puTable);

    return rowsAffected == 1;
}

Ответы [ 2 ]

1 голос
/ 25 мая 2009

EDIT: этот комментарий предполагает, что вы вставляете в таблицу, для которой GiftId является первичным ключом, что кажется маловероятным. Если так, то ответ Эойн Кэмпбелл имеет больше смысла!

Проверьте, является ли GiftId столбцом AUTO_INCREMENT; это эквивалент MySQL идентичности.

Вы можете воссоздать столбец как личность:

ALTER TABLE Gifts
         DROP COLUMN GiftId;

ALTER TABLE items
         ADD COLUMN GiftId INT NOT NULL AUTO_INCREMENT FIRST;
1 голос
/ 25 мая 2009
System.Data.NoNullAllowedException: Column 'GiftID' does not allow nulls. at 

Судя по виду вашего кода, вы забыли передать параметр GiftID в вашу функцию, но он ожидается (и не может быть нулевым) в строке таблицы.

Отсюда и исключение. Либо установите его в приведенном выше коде, либо задайте для него значение по умолчанию в базе данных MySQL.

...