專案需要,需要在資料庫中提供一個些資料,可讓使用者讀取,但不能修改。
或許你需要建立一個表,手動添加這些靜态資料,這樣的話,使用者有可能直接打開資料庫修改。
也許你會建立一個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的。
試執行此存儲過程:
SqlContext.Pipe.SendResultsStart(record);
SqlContext.Pipe.SendResultsRow(record);
SqlContext.Pipe.SendResultsEnd();