0

このコードは Null 参照例外を生成します。パラメータ配列が初期化される行で例外が発生します。何が問題になる可能性がありますか? スタックトレースをたどり、それに対してロジックを実行する方法がわかりません。前もって感謝します。

DAL dal = new DAL();

    string SQL = @"INSERT INTO Assets ([AssetName],[AssetType],[Model],[Description],
                                                          [PurchaseValue],[SalvageValue],[Currency],[DateAcquired,[DateRetire],[ImagePath],
                                                          [InUse])
                                                          VALUES (?,?,?,?,?,?,?,?,?,?,?)";

    OleDbParameter[] par = new OleDbParameter[]{ 
    new OleDbParameter("@assetname",name.Text),
    new OleDbParameter("@assettype",assettypes.SelectedValue.ToString()),
    new OleDbParameter("@model",model.Text),
    new OleDbParameter("@description",description.Text),
    new OleDbParameter("@purchasevalue",purchaseval.Value),
    new OleDbParameter("@salvagevalue",salvageval.Value),
    new OleDbParameter("@currency",currencies.SelectedIndex),
    new OleDbParameter("@dateacquired",purchasedate.Value),
    new OleDbParameter("@dateretire",purchasedate.Value.AddYears((int)lifetime.Value)),
    new OleDbParameter("@imagepath","N/A"),
    new OleDbParameter("@addedby",MDIParent1.User.ID)
    };
4

4 に答える 4

6

SelectedValueがない可能性もありますが、値を持たないnull許容型(おそらく日付?)が1つ以上ある可能性があります。デバッガーのステートメントの前に、すべてのパラメーターがnullでないことを確認して、どれを確認してください。

于 2009-01-17T01:26:53.383 に答える
2

クエリしているオブジェクトの1つがnullである可能性が最も高いようです。

それらを標準出力に印刷することをお勧めします。

于 2009-01-17T01:27:48.483 に答える
1

これらの行の1つにnull参照が含まれています。

new OleDbParameter("@assetname",name.Text),
new OleDbParameter("@assettype",assettypes.SelectedValue.ToString()),
new OleDbParameter("@model",model.Text),
new OleDbParameter("@description",description.Text),
new OleDbParameter("@purchasevalue",purchaseval.Value),
new OleDbParameter("@salvagevalue",salvageval.Value),
new OleDbParameter("@currency",currencies.SelectedIndex),
new OleDbParameter("@dateacquired",purchasedate.Value),
new OleDbParameter("@dateretire",purchasedate.Value.AddYears((int)lifetime.Value)),
new OleDbParameter("@imagepath","N/A"),
new OleDbParameter("@addedby",MDIParent1.User.ID)

デバッガーのプロパティ値を見てください。提供したコードでできることは実際には何もありません。

于 2009-01-17T01:33:27.533 に答える
0

実際には、最初に検証またはスクラブせずに、ユーザーから直接入力を取得しているようです。私のアドバイスは、おそらくあなたの NRE を解決するでしょうが、各ユーザーが入力した値をデータベースに送信する前に検証することです。これにより、データベースに不適切なクエリを追加する前に、入力のエラーをキャッチできます。

また、変数にオブジェクトと同じ名前を付けないでください。つまり

DAL dal = new DAL(); 

少なくともローカル変数に下線を引くか、別の名前を使用してください。

DAL _dal = new DAL();
DAL dataAccessLayer = new DAL();
于 2009-01-17T02:01:11.130 に答える