关于ADO.net继承性数据绑定的问题
我看了一篇来自MSDN的文章,上面使用Northwind数据库作为范例讲解继承性数据绑定,数据表关系如下:
TABLE: Customers Orders Orders Details
FIELD: CustomerID------------CustomerID ProduceID
OrderID----------------OrderID
建立表之间关系的代码如下:
private void Page_Load(object sender, EventArgs e)
{
string strConn =
"server=.;trusted_connection=yes;database=northwind";
string strSql = "SELECT CustomerID, CompanyName FROM " +
" Customers; " +
"SELECT OrderID, CustomerID, " +
" EmployeeID FROM Orders;" +
"SELECT OrderID, Products.ProductID," +
"ProductName, Products.UnitPrice FROM" +
" [Order Details], Products WHERE " +
" [Order Details].ProductID = " +
"Products.ProductID";
SqlConnection conn = new SqlConnection(strConn);
SqlDataAdapter da = new SqlDataAdapter(strSql, conn);
da.TableMappings.Add("Customers1", "Orders");
da.TableMappings.Add("Customers2", "OrderDetails");
_ds = new DataSet();
da.Fill(_ds, "Customers");
_ds.Relations.Add("Customer_Order",
_ds.Tables["Customers"].Columns["CustomerID"],
_ds.Tables["Orders"].Columns["CustomerID"]);
_ds.Relations[0].Nested = true;
_ds.Relations.Add("Order_OrderDetail",
_ds.Tables["Orders"].Columns["OrderID"],
_ds.Tables["OrderDetails"].Columns["OrderID"]);
_ds.Relations[1].Nested = true;
_customerRepeater.DataSource = _ds.Tables["Customers"];
_customerRepeater.DataBind();
}
由于我自己需要实现的继承性数据绑定只有两个表关联,数据表关系如下:
TABLE: category FORUM
categoryID------categoryID
name forumID
由于MSDN上面的文章用到了三个表,所以我将其简化如下:
SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
string strSql="SELECT categoryID,name,description FROM category; "+
"SELECT forumID,name,description,redirectURL,manageURL,categoryID FROM forum";
SqlDataAdapter da = new SqlDataAdapter(strSql, myConnection);
//da.TableMappings.Add("category1", "category");
da.TableMappings.Add("forum1", "forum"); -----------------(1)
DataSet ds = new DataSet();
da.Fill(ds,"category");
//da.Fill(ds,"forum"); -----------------(2)
ds.Relations.Add("category_forum",
ds.Tables["category"].Columns["categoryID"],
ds.Tables["forum"].Columns["categoryID"]);
ds.Relations[0].Nested = true;
代码执行后报错:
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
行 34: da.Fill(_ds, "category");
行 35: //da.Fill(_ds,"forum");
行 36: _ds.Relations.Add("category_forum",
行 37: _ds.Tables["category"].Columns["categoryID"],
行 38: _ds.Tables["forum"].Columns["categoryID"]);
我的想法:报错的原因我想使forum没有使用da.fill加入到da中,我将注释(2)恢复,这时候执行不再报错,但是产生的结果不正确,结果为一个category不论有几个forum与之
对应都显示只有一个forum与之对应,并且还不能够取出字段的值。但是回过头来看MSDN的范例代码 da.Fill(_ds, "Customers");也只不过将Customers填充到_ds中,但是令我不明白的是它在后面却可以用_ds.Relations将Customers和Orders建立关系。
请问我该如何修改我的代码,使得category和forum之间可以在DataSet中建立关系。谢谢您的帮助!