我正在尝试使用三层解决方案(或者它可能被称为)来插入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;
}
答案 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;