【问题标题】:Iterating DataSet Tables迭代数据集表
【发布时间】:2017-02-10 13:54:56
【问题描述】:

我正在运行一个运行两个选择语句的参数化 SQL 存储过程。我想为返回的结果分配一个DataSet() 以便于处理。但是,在我的语法中,我得到一个错误

无法将类型“System.Data.DataTable”隐式转换为“System.Data.DataSet”

有人可以告诉我如何做我想要的吗? -- 而不是将其称为ds.Tables[0];,我想关联一个有意义的名称。

public DataSet RunOneStoredProc()
{
    DataSet dataset = new DataSet();
    using (var conn = new SqlConnection(SQLCon))
    {
        var cmd = new SqlCommand("GetTeachersStudents", conn);
        cmd.Parameters.Add("@yearstart", SqlDbType.Date, 100);
        cmd.Parameters.Add("@yearend", SqlDbType.Date, 100);
        cmd.Parameters["@yearstart"].Value = dtpStartDate.Value.ToString("MM/dd/yyyy");
        cmd.Parameters["@yearend"].Value = dtpEndDate.Value.ToString("MM/dd/yyyy");
        cmd.CommandType = CommandType.StoredProcedure;
        var ds = new DataSet();
        using (var da = new SqlDataAdapter(cmd))
            da.Fill(ds);
        return dataset;
    }
}

private void btnPush_Click(object sender, EventArgs e)
{
    DataSet ds = new DataSet();
    DataSet teachers = new DataSet();
    DataSet students = new DataSet();
    ds = RunOneStoredProc();
    teachers = ds.Tables[0];
    students = ds.Tables[1];

}   

【问题讨论】:

    标签: c# datatable dataset


    【解决方案1】:

    试试这个。您还将创建DataSet ds 的新实例。没有必要,因为RunOneStoredProc() 返回一个新实例。

    private void btnPush_Click(object sender, EventArgs e)
        {
            DataSet ds = RunOneStoredProc();
            DataTable teachers = ds.Tables[0];
            DataTable students = ds.Tables[1];
    
        }   
    

    【讨论】:

    • 如果不想使用索引来访问数据集中的不同表,可以使用名称。 DataTable teachers = ds.Tables["teachers"];
    • 你说我正在创建一个新的 ds 实例。您的意思是从 RunOneStoredProc() 中删除 DataSet ds decleration 吗?
    • 你不需要创建另一个DataSet实例DataSet ds = new DataSet();因为RunOneStoredProc()已经返回了一个新实例。
    • DataSet ds = RunOneStoredProc(); 就是你所需要的。
    猜你喜欢
    • 2018-11-17
    • 1970-01-01
    • 2021-01-08
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    相关资源
    最近更新 更多