如何从数据库表返回数据表,而不是使用adapter.fill

时间:2013-02-17 08:52:54

标签: c# ado.net

我希望返回一个不使用adapter.fill技术的数据表。

    internal DataTable ConnectedSelect(string TableName, string[] Cols, string Condition)
    {
        DataTable dt = new DataTable();
        using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString))
        {
            con.Open();
            using (SqlCommand cmd = new SqlCommand(GenerateSelectStatment(TableName, Cols, Condition),con))
            {
                SqlDataReader rdr = cmd.ExecuteReader();
                object[] temp = new object[rdr.FieldCount];
                while (rdr.Read())
                {
                   rdr.GetValues(temp);
                   dt.Rows.Add(temp);
                }
            }
        }
        return dt;
    }
    }

问题是我得到的输入数组长于此表中的col数。 表有4列 可能是什么问题呢? rows.add应该添加一个包含4个元素的行,这与输入相同。

1 个答案:

答案 0 :(得分:2)

您可以使用load

DataTable方法
 dt.Load(rdr);

整个代码将是

internal DataTable ConnectedSelect(string TableName, string[] Cols, string Condition)
{
    DataTable dt = new DataTable();
    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString))
    {
        con.Open();
        using (SqlCommand cmd = new SqlCommand(GenerateSelectStatment(TableName, Cols, Condition),con))
        {
            SqlDataReader rdr = cmd.ExecuteReader();
            if(rdr.HasRows)
               dt.Load(rdr);
        }
    }
    return dt;
}
}