.net多語言和資料集內多資料表的處理(2)

來源:互聯網
上載者:User
資料 2 考慮一個資料集中有多個資料表的問題

好處是什嗎?

很重要的一點,可以很方便的導航取得相關的資訊,如Province.GetCityRows ()可以獲得這個省下面的所有城市,而Province.CountryRow則可以得到這個省所在的國家,是不是比以前通過外鍵再到資料庫去查方便的多呢?

伴隨著這種導航而來的是方便的級連更新,比如刪除了父記錄就會自動地所有關聯的子記錄刪除,這些都是自動進行的,你不需要多寫一行代碼。

其實,這些都是比較小的功能,更強大的功能在於方便的統計和彙總,考慮這麼一個需求:對於商品類別表ProductType,我需要計算每一類商品的價格總和並儲存到ProductType標的Total列中,我們以前會怎麼做呢?現在我們可以這麼寫ds.ProjectType.TotalColumn. Expression = “Sum(Child.Price)”;這樣是不是很方便呢?再比如,對於學校的班級表Class,希望統計每一個班所有學產生績(fraction)的標準差並儲存在Class表的StDev列中,那麼我們可以這麼寫ds.Class.StDevColumn.Expression = “StDev(Child.fraction”就可以了。

資料集架構:採用這種編寫方式開發的資料集架構大概是這個樣子



可以看到這個資料集裡包含了幾乎所有的地址資料,通過表間的關聯我們便可以非常方便的在資料集中導航。

如何與資料庫同步?

很不幸的,資料庫的發展還沒有趕上步伐,以至於我們在與資料庫同步的時候不得不考慮很多,我希望,在SQL SERVER的下一個版本中將不再需要我們這麼麻煩。

從資料庫擷取資料時,我們需要執行個體化多個資料配接器,每個資料配接器針對一張資料表,然後把它們承載的資料分別填充到資料集中相應的資料表中;

而把資料更新會資料庫的時候,我們也需要執行個體化多個資料配接器,然後依次更新資料庫的表,在這個步驟中,你要仔細考慮它們之間的順序,新增記錄的時候,要先主表後子表,刪除的時候要先子表後主表。

如下所示:

public SystemData GetSystemInfo(SqlConnection sqlcon)

{

SystemData ds = new SystemData();



SqlDataAdapter DAUsers = new SqlDataAdapter(SystemSQL.strGetUsers,sqlcon);

DAUsers.Fill(ds.Users);



SqlDataAdapter DARole = new SqlDataAdapter(SystemSQL.strGetRole,sqlcon);

DARole.Fill(ds.Role);



SqlDataAdapter DARUserRole = new SqlDataAdapter(SystemSQL.strGetRUserRole,sqlcon);

DARUserRole.Fill(ds.RUserRole);



SqlDataAdapter daModule = new SqlDataAdapter(SystemSQL.strGetModule,sqlcon);

daModule.Fill(ds.Module);



SqlDataAdapter daModuleFunction = new SqlDataAdapter(SystemSQL.strGetModuleFunction,sqlcon);

daModuleFunction.Fill(ds.ModuleFunction);



SqlDataAdapter daRoleFunction = new SqlDataAdapter(SystemSQL.strGetRoleFunction,sqlcon);

daRoleFunction.Fill(ds.RoleFunction);



SqlDataAdapter daUserFunction = new SqlDataAdapter(SystemSQL.strGetUserFunction,sqlcon);

daUserFunction.Fill(ds.UserFunction);



SqlDataAdapter daUserCustomParam = new SqlDataAdapter(SystemSQL.strGetUserCustomParam,sqlcon);

daUserCustomParam.Fill(ds.UserCustomParam);



return ds;

}

public void InsUpdUsers(SystemData ds)

{

DataTableExtend[] dts = new DataTableExtend[4];

dts[0] = new DataTableExtend(ds.Users, "Users");

dts[1] = new DataTableExtend(ds.RUserRole,"RUserRole");

dts[2] = new DataTableExtend(ds.UserCustomParam,"UserCustomParam");

dts[3] = new DataTableExtend(ds.UserFunction,"UserFunction");



SQLModify.ModifyDataBase(dts,dbName);

}



public void UpdDelUsers(SystemData ds)

{

DataTableExtend[] dts = new DataTableExtend[4];

dts[0] = new DataTableExtend(ds.RUserRole,"RUserRole");

dts[1] = new DataTableExtend(ds.UserCustomParam,"UserCustomParam");

dts[2] = new DataTableExtend(ds.UserFunction,"UserFunction");

dts[3] = new DataTableExtend(ds.Users, "Users");

SQLModify.ModifyDataBase(dts,dbName);

}





(未完待續)


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。