如何从存储过程填充DataTable

时间:2012-11-15 16:32:09

标签: c# asp.net .net ado.net

  

可能重复:
  How can i retrieve a table from stored procedure to a datatable

我正在尝试填充我的数据表。我已经创建了一个数据表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 个答案:

答案 0 :(得分:48)

您无需手动添加列。只需使用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之前连接已打开,它仍保持打开状态。

答案 1 :(得分:13)

使用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);
        }
    }
}

答案 2 :(得分: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);

答案 3 :(得分: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将拥有您要查找的信息,只要您存储的进度返回数据集(光标)。