【解決方法】ストアド プロシージャ (devexpress) を使用して 1 つの列にデータを挿入する方法

プログラミングQA


こんにちは、SQL に「Supplier no」と「Supplier Type」という名前の 2 つの列を持つテーブルがあり、Supplier Type に 1 文字だけ挿入したいと考えています。 一方、「サプライヤー番号」と「サプライヤー名」の2つの列を持つdevexpressグリッドビューにテーブルがあり、クリックしたチェックボックスに基づいて「サプライヤー番号」のデータをSQLのテーブルに渡したいと思います。 そのデータを渡すためにストアド プロシージャを使用しています。

見たい場合のストアドプロシージャは次のとおりです

SQL
@suppno int,
@type varchar
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

    -- Insert statements for procedure here
	insert into dbo.SuppType(SupplierType,SupplierNo)values(@type,@suppno)

これで、ボタン クリック イベントでデータを渡すコードができました。

C#
using (SuppDBDataContext db = new SuppDBDataContext())
               {

                   int[] selectedRowHandles = gridView1.GetSelectedRows();
                   for (int i = 0; i < gridView1.SelectedRowsCount; i++)
                   {


                       int selectedRowHandle = selectedRowHandles[i];

                       int cellValue = (int)gridView1.GetRowCellValue(selectedRowHandle, "Supplier No");

                       if (selectedRowHandle >= 0)
                           db.SuppType_Update(cellValue, "F");
                   }
                   XtraMessageBox.Show("Supplier Updated!");
               }

この行には、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーがあります

C#
int cellValue = (int)gridView1.GetRowCellValue(selectedRowHandle, "Supplier No");

私は何が間違っているのかわかりません。また、devexpress も初めてです。

私が試したこと:

C#
using (SuppDBDataContext db = new SuppDBDataContext())
              {

                  int[] selectedRowHandles = gridView1.GetSelectedRows();
                  for (int i = 0; i < gridView1.SelectedRowsCount; i++)
                  {


                      int selectedRowHandle = selectedRowHandles[i];

                      int cellValue = (int)gridView1.GetRowCellValue(selectedRowHandle, "Supplier No");

                      if (selectedRowHandle >= 0)
                          db.SuppType_Update(cellValue, "F");
                  }
                  XtraMessageBox.Show("Supplier Updated!");
              }

解決策 1

これは、私たちが最もよく聞かれる問題の 1 つであり、私たちが最も答えられない問題でもありますが、あなた自身が最も答えられる問題です。

エラーの意味を説明しましょう。変数、プロパティ、またはメソッドの戻り値を使用しようとしましたが、null が含まれています。これは、変数にクラスのインスタンスがないことを意味します。
ポケットのようなものです。シャツにポケットがあり、ペンを入れるのに使用します。 ポケットに手を入れてペンがないことに気づいたら、紙に自分の名前を書くことはできません。 空のポケットはヌル値 (ここにはペンがありません!) を与えているので、ペンを取り出したら通常行うことは何もできません。 なぜそれは空ですか? それが問題です – 今朝家を出るときにペンを手に取るのを忘れたのかもしれませんし、昨夜脱いだときに昨日のシャツのポケットにペンを忘れたのかもしれません.

私たちはそこにいなかったのでわかりません。さらに重要なことに、あなたのシャツも見えず、ましてやポケットに何が入っているかもわかりません!

コンピューターに戻ると、あなたは同じことを何らかの形で行っています。そして、あなたのコードを見ることはできません。
しかし、それは可能です。ここでは、Visual Studio が役に立ちます。 デバッガーでプログラムを実行し、失敗すると、問題が見つかった行が表示されます。 次に、そのさまざまな部分を調べて、どの値が null であるかを確認し、コードを振り返ってその理由を見つけることができます。 したがって、エラー行を含むメソッドの先頭にブレークポイントを置き、プログラムを最初からもう一度実行します。 今回は、デバッガーはエラーが発生する前に停止し、コードをステップ実行して値を確認することで、何が起こっているかを調べることができます。

何を見ることから始めます selectedRowHandle 次に、列名が文字列に入力されたとおりであるかどうかを確認します。「SupplierNo」ではなく「Supplier No」などです。

しかし、それはできません – 私たちはあなたのコードを持っていません。コードを持っていたとしても、それをどのように使用するかわかりません。あなたのデータもありません。 試してみて、どれだけの情報が得られるか見てみましょう!

コメント

タイトルとURLをコピーしました