我有以下代码:
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)
谢谢
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中命名新填充的表.
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |