2009-05-25 21 views
0

3層のソリューション(またはそれが呼び出される可能性があります)を使用してMySqlデータベースに挿入しようとしています。bllからmysqlへのASP.NETの挿入

私はこれをMS-SQLデータベースで行うことができ、非常にうまくいきました。

しかし、私が挿入物を作ろうとしているときに、IDがnullになることはありません。 私はデータベースがそれを世話したと思いました。 コードに直接挿入を書き、MySqlCommandとexecuteNonQueryを使用するとうまくいきます。

BLLとDALをMySqlで使用することはできませんか?

エラーメッセージ:

System.Data.NoNullAllowedException:列 'GiftID' はNULLを許可していません。システムのSystem.Data.DataColumn.CheckNullable(DataRow行)System.Data.DataColumn.CheckColumnConstraint(DataRow行、DataRowActionアクション)System.Data.DataTable.RaiseRowChanging(DataRowChangeEventArgs、DataRowErow、DataRowAction eAction、Boolean fireEvent)at System System.Data.DataTable.InsertRow(DataRowの行、Int32のproposedID、Int32 pos、ブールfireEvent)で.Data.DataTable.SetNewRecordWorker(DataRow行、Int32 proposedRecord、DataRowActionアクション、ブールisInMerge、Int32位置、ブールファイヤーイベント、例外& deferredException) 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(String FirstName、String Last Name、String Company、String Address、String Zip、String City、String Phone、String Email、Byte ContactMe、UInt32 Amount、UInt32 TransactionN)の行444 C#\ Users \ IT \ Documents \ Visual Studio 2008 \ WebSites \ payex \ App_Code \ BLL \ PayExBLL.csの66行目:_Default.btn_next3_Clickの66行目(オブジェクト送信者、EventArgs e) \ユーザーは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パラメータを関数に渡すのを忘れてしまいましたが、テーブル行には期待されています(またnullにはできません)。

したがって、例外です。上のコードで設定するか、MySQLデータベースでデフォルト値を定義してください。

+0

、GiftIdは自動インクリメントの主キーです。だから、私は挿入をするときに自動的に新しい番号を取得する必要があります。 – Fred

+0

しかしそれは本当に問題です。ここであなたのDALの仕事は見られないので、この場合は "いいえ"と同じくらい良いですね。あなたのDALを再訪してください。問題はどこにあるのだろう。 – CarmineSantini

1

EDIT:このコメントは、ギフトIDがプライマリキーであるテーブルに挿入することを前提としていますが、そうは思われません。もしそうなら、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

それは厄介な部分です。それはAUTO INCREMENTを持っています。 – Fred

+0

payexusersRowの定義を確認してください。それはGiftIdを含んでいますか?その場合、DALはデータベースにNULLとして渡している可能性があります。アイデンティティまたはオプションとしてマークすることができるかどうかを確認してください。 – Andomar