【问题标题】:ASP.NET insert from bll to mysqlASP.NET 从 bll 插入到 mysql
【发布时间】:2010-10-28 18:42:22
【问题描述】:

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

我已经用 MS-sql 数据库做了很多次,效果很好。

但是现在当我尝试进行插入时,我得到的 ID 不能为空。 我认为数据库可以解决这个问题。 如果我直接在代码中编写插入并使用 MySqlCommand 和 executeNonQuery 效果很好。

MySql 不能使用 BLL 和 DAL 吗?

错误信息:

System.Data.NoNullAllowedException:列“GiftID”不允许空值。在 System.Data.DataColumn.CheckNullable(DataRow row) 在 System.Data.DataColumn.CheckColumnConstraint(DataRow row, DataRowAction action) 在 System.Data.DataTable.RaiseRowChanging(DataRowChangeEventArgs args, DataRow eRow, DataRowAction eAction, Boolean fireEvent) 在 System .Data.DataTable.SetNewRecordWorker(DataRow 行,Int32 提议记录,DataRowAction 操作,布尔 isInMerge,Int32 位置,布尔 fireEvent,Exception& deferredException)在 System.Data.DataTable.InsertRow(DataRow 行,Int32 提议ID,Int32 pos,布尔fireEvent)在System.Data.DataRowCollection.Add(DataRow row) at PayEx.payexusersDataTable.AddpayexusersRow(payexusersRow row) 在 c:\Users\IT\AppData\Local\Temp\Temporary ASP.NET Files\payex\45bd406a\10c84208\App_Code.cyqhjqo7 .1.cs: 第 444 行 PayExBLL.AddPayExUser(String Firstname, String Lastname, String Company, String Address, String Zip, String City, String Phone, String Email, Byte ContactMe, UInt32 Amount, UInt32 TransactionNumber, Byte Anonymous, String Cu rrency) 在 c:\Users\IT\Documents\Visual Studio 2008\WebSites\payex\App_Code\BLL\PayExBLL.cs:第 66 行,位于 c:\Users\IT\Documents 中的 _Default.btn_next3_Click(Object sender, EventArgs e) \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;
}

【问题讨论】:

    标签: asp.net mysql insert bll


    【解决方案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;
    

    【讨论】:

    • 这是最奇怪的部分。它有自动增量。
    • 查看payexusersRow的定义;它包括 GiftId 吗?如果是这样,DAL 可能会将其作为 NULL 传递给数据库。看看是否可以将其标记为标识或可选。
    【解决方案2】:
    System.Data.NoNullAllowedException: Column 'GiftID' does not allow nulls. at 
    

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

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

    【讨论】:

    • 嗯,GiftId 是一个自动递增的主键。所以当我插入时它应该会自动获得一个新号码。
    • 但这确实是问题所在。我们在这里看不到您的 DAL 工作,因此在这种情况下,“应该”与“不知道”一样好。重新访问您的 DAL。我敢打赌这就是问题所在。
    猜你喜欢
    • 2013-05-31
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 2018-01-03
    • 2019-12-19
    • 1970-01-01
    • 2018-03-19
    • 2016-09-05
    相关资源
    最近更新 更多