ASP.NET从bll插入到mysql

时间:2009-05-25 15:57:43

标签: asp.net mysql insert bll

我正在尝试使用三层解决方案(或者它可能被称为)来插入MySql数据库。

我已经使用MS-sql数据库完成了这项工作,并且它运行良好。

但是现在当我尝试插入时,我得到的ID不能为空。 我以为数据库处理了这个问题。 如果我直接在代码中编写插入并使用MySqlCommand和executeNonQuery,那么它很有效。

是否无法在MySql中使用BLL和DAL?

错误讯息:

System.Data.NoNullAllowedException:列'GiftID'不允许空值。系统中的System.Data.DataColumn.CheckColumnConstraint(DataRow行,DataRowAction操作)处的System.Data.DataColumn.CheckNullable(DataRow行)处于System.Data.DataTable.RaiseRowChanging(DataRowChangeEventArgs args,DataRow eRow,DataRowAction eAction,Boolean fireEvent) System.Data.DataTable.InsertRow中的.Data.DataTable.SetNewRecordWorker(DataRow row,Int32 proposedRecord,DataRowAction action,Boolean isInMerge,Int32 position,Boolean fireEvent,Exception& deferredException)(DataRow行,Int32 proposedID,Int32 pos,Boolean fireEvent)位于c:\ Users \ IT \ AppData \ Local \ Temp \ Temporary ASP.NET Files \ payex \ 45bd406a \ 10c84208 \ App_Code中的PayEx.payexusersDataTable.AddpayexusersRow(payexusersRow行)的System.Data.DataRowCollection.Add(DataRow行)。 cyqhjqo7.1.cs:PayExBLL.AddPayExUser的第444行(String Firstname,String Lastname,String Company,String Address,String Zip,String City,String Phone,String Email,Byte ContactMe,UInt32 Amount,UInt32 TransactionNumber,Byte Anonymous,Strin g货币)在c:\ Users \ IT \ Documents \ Visual Studio 2008 \ WebSites \ payex \ App_Code \ BLL \ PayExBLL.cs:第66行at_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 个答案:

答案 0 :(得分:1)

System.Data.NoNullAllowedException: Column 'GiftID' does not allow nulls. at 

从代码的外观来看,您忘记将GiftID参数传递给您的函数,但它在表行中是预期的(并且不能为空)。

因此例外。在上面的代码中设置它,或在MySQL数据库中为它定义默认值。

答案 1 :(得分:1)

编辑:此评论假设您正在插入一个表,其中GiftId是主键,这似乎不太可能。如果是这样,Eoin Campbell的回答更有意义!

检查GiftId是否为AUTO_INCREMENT列;那是MySQL相当于身份的。

您可以将列重新创建为以下标识:

ALTER TABLE Gifts
         DROP COLUMN GiftId;

ALTER TABLE items
         ADD COLUMN GiftId INT NOT NULL AUTO_INCREMENT FIRST;