2009-05-25 58 views
0

我想使用三層解決方案(或者它可能被稱爲)來插入MySql數據庫。ASP.NET從bll插入到mysql

我已經用MS-sql數據庫完成了這個可能的時間,它工作得很好。

但現在當我試圖做一個插入我得到的ID不能爲空。 我以爲數據庫處理好了。 如果我直接在代碼中寫入插入,並使用MySqlCommand和executeNonQuery,那麼它的效果很好。

是不是可以在MySql中使用BLL和DAL?

錯誤消息:

System.Data.NoNullAllowedException:柱 'GiftID' 不允許空值。 System.Data.DataTable.RaiseRowChanging(DataRowChangeEventArgs args,DataRow eRow,DataRowAction eAction,Boolean fireEvent)上的System.Data.DataColumn.CheckNullable(DataRow行)System.Data.DataColumn.CheckColumnConstraint(DataRow row,DataRowAction action) .Data.DataTable.SetNewRecordWorker(DataRow row,Int32 proposedRecord,DataRowAction action,Boolean isInMerge,Int32 position,Boolean fireEvent,Exception & deferredException)at System.Data.DataTable.InsertRow(DataRow row,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 row)處的System.Data.DataRowCollection.Add(DataRow行) cyqhjqo7.1.cs:PayExBLL.AddPayExUser(String Firstname,String Lastname,String Company,String Address,String Zip,String City,String Phone,String Email,Byte ContactMe,UInt32 Amount,UInt32 TransactionN C:\ Users \ IT \ Documents \ Visual Studio 2008 \ WebSites \ payex \ App_Code \ BLL \ PayExBLL.cs中的第66行:_Default.btn_next3_Click(Object sender,EventArgs e)in c: \用戶\ IT \文檔\ Visual Studio 2008的\網站已\ 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; 
} 

回答

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

從代碼的外觀,你忘記將GiftID參數傳遞給您的函數,但它在您的表格行中預期(並且不能爲空)。

因此例外。將其設置在上面的代碼中,或者在MySQL數據庫中爲其定義默認值。

+0

好,GiftId具有自動增量的主鍵。所以它應該在我插入時自動獲得一個新號碼。 – Fred 2009-05-25 16:36:55

+0

但這確實是個問題。我們在這裏看不到您的DAL工作,所以在這種情況下「應該」與「不知道」一樣好。重新訪問您的DAL。我敢打賭,這是問題所在。 – CarmineSantini 2009-05-25 20:33:30

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; 
+0

這是奇怪的部分。它有自動增量。 – Fred 2009-05-25 16:34:10

+0

檢查payexusersRow的定義;它是否包含GiftId?如果是這樣,DAL可能會將它作爲NULL傳遞給數據庫。看看你是否可以將其標記爲身份或可選。 – Andomar 2009-05-25 16:44:02