0

私は .NET 初心者で、ストアド プロシージャを実行して DataTable を返す関数を作成する必要があります。

私の SqlConnection は既に初期化されており、デバッガーでの実行中に DataAdapter が値を返すのを見ることができますが、私の DataTable は空です。

 public DataTable ExecStoredProcedure(String spName, String uId)
        {
            DataTable dt = new DataTable();
            try
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(spName, conn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@UnitIDList", uId);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dt);
            }
            catch (SqlException ex)
            {
                throw new Exception(ex.StackTrace + ex.Message);
            }
            finally
            {
                conn.Close();
            }

            return dt;
        }

助けてください。

4

2 に答える 2

1

このコードに問題は見られず、自分の sproc を使用して自分で実行しました。大丈夫そうです。

デバッガーでコードをステップ実行していて、次の行に到達した場合:

da.Fill(dt);

それを実行させてから、次の行が実行される前にまたはウィンドウdt.Rows.Countでの値を確認してください。報告された数は?WatchImmediate

dt.Rows.Count > 0次に、メソッドから取得した DataTable を使用して何かを実行しているコードを確認する必要がある場合は、そこに問題があります。

ストアド プロシージャからデータが返されない場合dt.Rows.Count ==0(これは問題ではないようです)、sproc 内の SQL を確認する必要があります。見て、見つけたものを投稿してください...

于 2011-02-17T12:02:23.213 に答える
1

SqlDataAdapter結果として空を返すという同じ問題がありましたDataTableが、私の場合、2 つのパラメーター (「CheckDate1」と「CheckDate2」、ストアド プロシージャは私のものではありません) がタイプSqlDbType.DateTimeVARCHAR(10)しかし、私が最初に見落としていた非常に賢い人がそれらを定義しました。

残念ながら、これはエラー メッセージにはなりませんでしたが、空の結果セットが返されるだけでした。パラメータの型を変更するとすぐに、期待どおりの結果が得られました。

これが他の誰かに役立つことを願っています。

G.

于 2011-12-09T11:12:58.403 に答える