数据集中有一个名为"Table"的表,而不是我传入的表?

Gur*_*epS 0 c#

我有以下代码:

string SQL = "select * from " + TableName;

using (DS = new DataSet())
using (SqlDataAdapter adapter = new SqlDataAdapter())
using (SqlConnection sqlconn = new SqlConnection(connectionStringBuilder.ToString()))
using (SqlCommand objCommand = new SqlCommand(SQL, sqlconn))
{
    sqlconn.Open();
    adapter.SelectCommand = objCommand;
    adapter.Fill(DS);
}

System.Windows.Forms.MessageBox.Show(DS.Tables[0].TableName);

return DS;
Run Code Online (Sandbox Code Playgroud)

但是,每次运行此代码时,数据集(DS)都会填充一个名为"Table"的表.它不代表我作为参数TableName传入的表名,并且此参数不会发生变异,因此我不知道Table的名称来自何处.我希望该表与我传入的tableName参数相同?

知道为什么不是这样吗?

编辑:重要事实:此代码需要返回一个数据集,因为我在另一个依赖于此的方法中使用dataRelation对象,并且不使用数据集,该方法抛出异常.该方法的代码是:

DataRelation PartToIntersection = new DataRelation("XYZ", 
        this.LoadDataToTable(tableName).Tables[tableName].Columns[0],
        // Treating the PartStat table as the parent - .N
        this.LoadDataToTable("PartProducts").Tables["PartProducts"].Columns[0]);
        // 1

        // PartsProducts (intersection) to ProductMaterial
        DataRelation ProductMaterialToIntersection = 
           new DataRelation("", ds.Tables["ProductMaterial"].Columns[0],
                                ds.Tables["PartsProducts"].Columns[1]);
Run Code Online (Sandbox Code Playgroud)

谢谢

mar*_*c_s 5

DataSet中第一个表的默认名称是Table,第二个表将被调用Table1,第三个表将被调用Table2,依此类推.DataSet 不会从底层存储中读取表名 - 并且没有选项可以让它这样做.

这是记录在案的行为 - 请参阅MSDN文档:

如果DataAdapter遇到多个结果集,它会在DataSet中创建多个表.这些表的增量默认名称为TableN,从Table0的"Table"开始.如果将表名作为参数传递给Fill方法,则会为表提供一个增量默认名称TableNameN,从TableName0的"TableName"开始.

如果你想要其他名字,你必须提供 - 使用这个声明:

adapter.Fill(DS, Tablename);
Run Code Online (Sandbox Code Playgroud)

这将Tablename在DataSet中命名新填充的表.