0

私はC#で作業していて、DataSetとがありDataTableます。にを追加しDataTableましたDataSet。次にDataTable、SQLクエリを入力します。デバッガーでは、のデータを確認できますDataTableDataTableDataSetのテーブルのリストに自分が表示されていますが、これはnullテーブルです(つまり、列もデータもありません)。データが表示されないのはなぜですか?これが私のコードです:

DataSet ds = new DataSet();
DataTable dt = new DataTable("BaseData");
ds.Tables.Add(dt);
List<SqlParameter> paramz = new List<SqlParameter>();
paramz.Add(new SqlParameter("@LitHoldDetailsID", litHoldDetailsID));
dt = LHClassLibrary.LHDataAccessLayer.ExecuteSelect("usp_GetLitHoldDetails_A", paramz);

私はもう試した

ds.AcceptChanges();

しかし、それは役に立ちません。本当に事前にDataTableのすべての列を定義する必要がありますか?これは多数の列を返すクエリなので、その手順をスキップできることを期待しています。

4

3 に答える 3

3

おそらく、次のように SqlAdaptor.Fill(DataTable) を使用する必要があります。

string sql = @"Data Source=.;Initial Catalog=test;Integrated Security=True";
SqlConnection conn = new SqlConnection(sql);
conn.Open();
SqlDataAdapter adaptor = new SqlDataAdapter("<sql query>", conn);
DataTable dt = new DataTable();
adaptor.Fill(dt);
于 2013-01-07T21:18:26.943 に答える
2

この方法でコード実行の順序を変更しようとします

DataSet ds = new DataSet();
List<SqlParameter> paramz = new List<SqlParameter>();
paramz.Add(new SqlParameter("@LitHoldDetailsID", litHoldDetailsID));
DataTable dt = LHClassLibrary.LHDataAccessLayer.ExecuteSelect("usp_GetLitHoldDetails_A", paramz);
dt.TableName = "BaseData";
if(dt.DataSet != null) dt.DataSet.Tables.Remove(dt);
ds.Tables.Add(dt);

ExecuteSelect メソッドは、ストアド プロシージャによって返されたすべての列と行を含む DataTable を初期化して返すと思います。

この時点でのみ、DataTable が DataSet に追加されます。前ではありません。
コードでは、変数dtは ExecuteSelect によって返された DataTable に割り当てられますが、これは以前に作成された DataTable への参照と同じではないため、DataSet は空のテーブルのままになります。

于 2013-01-07T21:23:24.677 に答える
0

私はいつもこのようにしています。お役に立てれば!

using (SqlConnection con = new SqlConnection(SqlConString))
{
    string command = "Your Query Here...";
    using (SqlCommand cmd = new SqlCommand(command, con))
    {
        cmd.Parameters.AddWithValue("@Param", SqlDbType.Type).Value = YourParameter;

        con.Open();
        using (SqlDataAdapter da = cmd.ExecuteNonQuery())
        {
            da.Fill(dt);
        }
    }
}
于 2013-01-07T21:25:04.637 に答える