專案需要,需要在數據庫中提供一個些數據,可讓用戶讀取,但不能修改。或許你需要創建一個表,手動添加這些靜態數據,這樣的話,用戶有可能直接打開數據庫修改。也許你會創建一個table-valued 函數并加密。解決方案很多,下面Insus.NET使用Clr存儲過程來實現,把數據直接設置于CLR程序中。當部署于SQL時,如果用戶沒有拿到dll,也許一時無法修改,僅能只讀了。創建一個CLR存儲過程:可復制代碼:
[Microsoft.SqlServer.Server.SqlPRocedure] public static void SiteInfor() { //創建變量 SqlMetaData Id; SqlMetaData Name; SqlMetaData Key; SqlDataRecord record; //創建metadata列(字段)。 Id = new SqlMetaData("Id", SqlDbType.Int); Name = new SqlMetaData("Name", SqlDbType.NVarChar,25); Key = new SqlMetaData("Key", SqlDbType.NVarChar,30); //使用metadata列創建一筆新記錄 record = new SqlDataRecord(new SqlMetaData[] { Id, Name, Key }); //為列域賦值。 record.SetInt32(0,1); record.SetString(1, "DG"); record.SetString(2, "5a01ceba-4168-44a2-a68a-5b430e5ad127"); //將記錄發送到調用程序。 SqlContext.Pipe.Send(record); }View Code
部署至SQL中,有兩種方式,一是手動在Microsoft SQL Management Studio下進行,還有一個是在查詢分析器執行SQL語句。兩種方法,均在前面的CLR相關文章中詳細提及。部署成功,我們可以在SQL數據庫可看到CLR存儲過程:此存儲過程,我們是無法Modify的。試執行此存儲過程:
下面內容于2015-04-03 09:40分修改或補充:針對最后一段代碼,修改如下:
SqlContext.Pipe.SendResultsStart(record);SqlContext.Pipe.SendResultsRow(record);SqlContext.Pipe.SendResultsEnd();View Code
新聞熱點
疑難解答