專案須要,須要在數據庫中提供一個些數據,可以讓用戶讀取,但不能修改。
或許你須要建立一個表,手動添加這些靜態數據,這樣的話,用戶有可能直接打開數據庫修改。
也許你會建立一個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); }
部署至SQL中,有兩種方式,一是手動在Microsoft SQL Management Studio下進行,還有一個是在查詢分析器執行SQL語句。兩種方法,均在前面的CLR相關文章中詳細說起。
部署成功,咱們能夠在SQL數據庫可看到CLR存儲過程:
此存儲過程,咱們是沒法Modify的。
試執行此存儲過程:
ide
下面內容於2015-04-03 09:40分修改或補充:
針對最後一段代碼,修改以下:
函數
SqlContext.Pipe.SendResultsStart(record);
SqlContext.Pipe.SendResultsRow(record);
SqlContext.Pipe.SendResultsEnd();