修改数据表,它是c#数据集的一部分-数据集没有显示的变化

本文关键字:数据集 显示 变化 一部分 它是 数据表 修改 | 更新日期: 2023-09-27 17:50:59

我在c#工作,我有一个DataSet和一个DataTable。我把DataTable加到DataSet中。然后用SQL查询填充DataTable。在调试器中,我可以在DataTable中看到数据。我在数据集的表列表中看到我的DataTable,但它是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中的所有列吗?这是一个返回大量列的查询,所以我希望可以跳过这一步。

修改数据表,它是c#数据集的一部分-数据集没有显示的变化

您可能需要像这样使用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);

我会尝试用这种方式改变你的代码执行顺序

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返回的数据表,但这与之前创建的数据表的引用不同,因此你的数据集仍然是一个空表。

我总是这样做;希望这对你有帮助!

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