[摘要]tableNames[index].Length == 0 ) throw new ArgumentException( "The tableNames parameter mu...
tableNames[index].Length == 0 )
throw new ArgumentException( "The tableNames parameter must contain a list of tables, a value was provided as null or empty string.", "tableNames" );
tableName += (index + 1).ToString();//这里出现错误
}
}
dataAdapter.Fill(dataSet);
command.Parameters.Clear();
}
if( mustCloseConnection )
connection.Close();
}
这里把tableName += (index + 1).ToString();修改成
dataAdapter.TableMappings.Add((index>0) (tableName+index.ToString()):tableName, tableNames[index]);就能解决问题。 |
接下来看看窗体程序的代码:
public class Form1 : System.Windows.Forms.Form { private DataAccess _dataAccess; private DatasetOrders _ds; //…… //构造函数 public Form1() { InitializeComponent(); _dataAccess = new DataAccess(); _ds = new DatasetOrders(); _ds.EnforceConstraints = false; //关闭约束检查,提高数据填充效率 this.dataGridCustomers.DataSource = _ds; this.dataGridCustomers.DataMember = _ds.Customers.TableName; this.dataGridOrders.DataSource = _ds; this.dataGridOrders.DataMember = _ds.Customers.TableName+"."+_ds.Customers.ChildRelations[0].RelationName; this.dataGridOrderDetails.DataSource = _ds; this.dataGridOrderDetails.DataMember =_ds.Customers.TableName+"."+ _ds.Customers.ChildRelations[0].RelationName+"."+ _ds.Orders.ChildRelations[0].RelationName; } |
对于上面的三个表的动态关联,你也可以使用SetDataBinding方法来完成数据的动态绑定,而不是分别指定DataGride的DataSource和DataMemger属性。
this.dataGridCustomers.SetDataBinding(_ds,_ds.Customers.TableName);
this.dataGridOrders.SetDataBinding(_ds,_ds.Customers.TableName+"."+_ds.Customers.ChildRelations[0].RelationName);
this.dataGridOrderDetails.SetDataBinding(_ds,_ds.Customers.TableName+"."+ _ds.Customers.ChildRelations[0].RelationName+"."+_ds.Orders.ChildRelations[0].RelationName); } |
数据填充事件处理如下:
private void buttonFillData_Click(object sender, System.EventArgs e) { _ds.Clear();//重新填充数据集 _dataAccess.FillCustomerOrdersInfo(_ds); //_dataAccess.FillCustomerOrdersInfoWithSqlHelper(_ds); } |
执行上面的事件处理函数我们会看到数据显示到对应的DataGrid上,如(图2-1)所示。
如果使用数据读取器获取多表纪录下面是实现的一种方式(参考):
SqlCommand comm = new SqlCommand("GetCustomerOrdersInfo",_conn); comm.CommandType = CommandType.StoredProcedure; _conn.Open(); SqlDataReader reader = comm.ExecuteReader(); do { while(reader.Read()) { Console.WriteLine(reader[0].ToString());//获取数据代码 } }while(reader.NextResult()); Console.ReadLine(); _conn.Close();
|
关键词:ADO.NET中的多数据表设置浅析之读取