24

重複の可能性:
ストアドプロシージャからデータテーブルにテーブルを取得するにはどうすればよいですか

データテーブルにデータを入力しようとしています。データテーブル tmpABCD を作成しましたが、これにストアド プロシージャの値を入力する必要があります。これ以上先に進むことができません。

SqlConnection sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings["DB"].ConnectionString);
sqlcon.Open();
SqlCommand cmd = new SqlCommand("usp_GetABCD", sqlcon);

DataTable dt = new DataTable("tmpABCD");

dt.Columns.Add(new DataColumn("A"));
dt.Columns.Add(new DataColumn("B"));
dt.Columns.Add(new DataColumn("C"));
dt.Columns.Add(new DataColumn("D"));
4

4 に答える 4

59

列を手動で追加する必要はありません。a を使用するだけでDataAdapter、次のように簡単です。

DataTable table = new DataTable();
using(var con = new SqlConnection(ConfigurationManager.ConnectionStrings["DB"].ConnectionString))
using(var cmd = new SqlCommand("usp_GetABCD", con))
using(var da = new SqlDataAdapter(cmd))
{
   cmd.CommandType = CommandType.StoredProcedure;
   da.Fill(table);
}

接続を開いたり閉じたりする必要さえないことに注意してください。これは、によって暗黙的に行われDataAdapterます。

SELECT ステートメントに関連付けられた接続オブジェクトは有効である必要がありますが、開いている必要はありません。Fill が呼び出される前に接続が閉じられた場合は、データを取得するために接続が開かれ、その後閉じられます。Fill が呼び出される前に接続が開いている場合は、開いたままになります。

于 2012-11-15T16:37:58.677 に答える
14

代わりにSqlDataAdapterを使用してください。これははるかに簡単で、列名を自分で定義する必要はありません。クエリ結果から列名を取得します。

using (SqlConnection sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings["DB"].ConnectionString))
{
    using (SqlCommand cmd = new SqlCommand("usp_GetABCD", sqlcon))
    {
        cmd.CommandType = CommandType.StoredProcedure;

        using (SqlDataAdapter da = new SqlDataAdapter(cmd))
        {
            DataTable dt = new DataTable();

            da.Fill(dt);
        }
    }
}
于 2012-11-15T16:38:43.057 に答える
2

あなたは使用することができますSqlDataAdapter

    SqlDataAdapter adapter = new SqlDataAdapter();
    SqlCommand cmd = new SqlCommand("usp_GetABCD", sqlcon);
    cmd.CommandType = CommandType.StoredProcedure;
    adapter.SelectCommand = cmd;
    DataTable dt = new DataTable();
    adapter.Fill(dt);
于 2012-11-15T16:35:56.290 に答える
2

SqlDataAdapter を使用すると、すべてが簡素化されます。

//Your code to this point
DataTable dt = new DataTable();

using(var cmd = new SqlCommand("usp_GetABCD", sqlcon))
{
  using(var da = new SqlDataAdapter(cmd))
  {
      da.Fill(dt):
  }
}

保存された手順がデータセット (カーソル) を返す限り、DataTable には探している情報が含まれます。

于 2012-11-15T16:37:09.923 に答える