SQL Server數(shù)據(jù)庫DataRelation的應(yīng)用示例詳解
作者:邀月
本文我們主要介紹了SQL Server數(shù)據(jù)庫DataRelation的一個示例,通過這個示例讓我們來了解一下DataRelation的應(yīng)用吧,希望能夠?qū)δ兴鶐椭?/div>
SQL Server數(shù)據(jù)庫DataRelation的應(yīng)用是本文我們主要要介紹的內(nèi)容,我們知道,System.Data.DataRelation 類,表示兩個DataTable 對象之間的父/子關(guān)系。在常見的查詢中,可以利用SQL Server 2005/2008的CTE應(yīng)用來進(jìn)行遞歸查詢,這里有一個典型示例:http://www.cnblogs.com/downmoon/archive/2009/10/23/1588405.html。
此外,在數(shù)據(jù)量不大的情況下,也可以用DataRelation進(jìn)行主子表或父子表的關(guān)聯(lián)。我們假定:有兩張表請假類型LeaveType和請假表Leave,這里是一個表結(jié)構(gòu)的SQL,代碼如下:
- create table LeaveType (
- PKID int identity(1,1),
- TypeName nvarchar(50) null,
- CurState smallint not null default 0,
- constraint PK_LEAVETYPE primary key (PKID)
- )
- go
- create table Leave (
- PKID int identity(1,1),
- Title nvarchar(50) null,
- Reason nvarchar(254) null,
- LoginID nvarchar(50) null,
- LeaveTypeID int ,
- DepartID int null,
- EmployeeID int null,
- AddTime datetime null,
- BeginTime datetime null,
- EndTime datetime null,
- TBeginDate datetime null,
- TEndDate datetime null,
- Remark nvarchar(1000) null,
- ModUser nvarchar(50) null,
- ModTime datetime null,
- CurState smallint not null default 0,
- constraint PK_LEAVE primary key (PKID)
- )
- go
再插入一些測試數(shù)據(jù):
代碼如下:
- truncate table LeaveType
- insert into
- LeaveType
- select '事假',1 union all
- Select '病假',1 union all
- select '婚假',1 union all
- select '產(chǎn)假',1 union all
- select '特休假',1
- go
- Insert into Leave
- select '請假'+Convert( Nvarchar(11),dateadd(dd,-500,getdate()),120),'準(zhǔn)備與方鴻漸結(jié)婚','孫嘉柔',3,1,1909,getdate(),'2010-1-1','2012-1-1','2010-1-1','2012-1-1',
- '這回鐵了心了','孫嘉柔',getdate(),1
- union all
- select '回娘家'+Convert( Nvarchar(11),dateadd(dd,-200,getdate()),120),'準(zhǔn)備為方鴻漸生孩子','孫嘉柔',4,1,1909,getdate(),'2010-1-1','2012-1-1','2010-1-1','2012-1-1',
- '這回鐵了心了','孫嘉柔',getdate(),1
- union all
- select
- '回娘家'+Convert( Nvarchar(11),dateadd(dd,-10,getdate()),120),'準(zhǔn)備與方鴻漸離婚','孫嘉柔',1,1,1909,getdate(),'2010-1-1','2012-1-1','2010-1-1','2012-1-1',
- '這回鐵了心了','孫嘉柔',getdate(),1
- union all
- select '回娘家'+Convert( Nvarchar(11),dateadd(dd,-2,getdate()),120),'準(zhǔn)備與方鴻漸離婚','孫嘉柔',2,1,1909,getdate(),'2010-1-1','2012-1-1','2010-1-1','2012-1-1',
- '這回鐵了心了','孫嘉柔',getdate(),1
- union all
- select '回娘家'+Convert( Nvarchar(11),getdate(),120),'準(zhǔn)備與方鴻漸離婚','孫嘉柔',2,1,1909,getdate(),'2010-1-1','2012-1-1','2010-1-1','2012-1-1',
- '這回鐵了心了','孫嘉柔',getdate(),1
- update Leave set Title='第'+cast(PKID as nvarchar(10))+'次'+Title
查詢主要代碼如下:
- protected void Page_Load(object sender, EventArgs e)
- {
- SqlConnection objConn = default(SqlConnection);
- SqlDataAdapter da = default(SqlDataAdapter);
- DataSet ds = default(DataSet);
- //DataRow dtrParent = default(DataRow);
- //DataRow dtrChild = default(DataRow);
- objConn = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["Testdb"]);
- da = new SqlDataAdapter("SELECT * FROM LeaveType", objConn);
- ds = new DataSet();
- try
- {
- objConn.Open();
- da.Fill(ds, "LeaveTypes");
- da.SelectCommand = new SqlCommand("SELECT * FROM Leave", objConn);
- da.Fill(ds, "Leaves");
- }
- catch (SqlException exc)
- {
- Response.Write(exc.ToString());
- }
- finally
- {
- objConn.Dispose();
- }
- ////Create the Data Relationship
- ds.Relations.Add("Type_Leave", ds.Tables["LeaveTypes"].Columns["PKID"], ds.Tables["Leaves"].Columns["LeaveTypeID"]);
- ////Display the Category and Child Products Within
- foreach (DataRow drParent in ds.Tables["LeaveTypes"].Rows)
- {
- lblDisplay.Text += "<h3>" + drParent["TypeName"] + "</h3><ul>";
- foreach (DataRow drChild in drParent.GetChildRows("Type_Leave"))
- {
- lblDisplay.Text += "<li>" + drChild["loginID"] + drChild["Title"] + drChild["Reason"] + "</li>";
- }
- lblDisplay.Text += "</ul>";
- }
- }
最終效果:
關(guān)于SQL Server數(shù)據(jù)庫用DataRelation進(jìn)行主子表或父子表的關(guān)聯(lián)的知識就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!
【編輯推薦】
責(zé)任編輯:趙鵬
來源:
博客園


相關(guān)推薦




