在數據庫中提供只讀數據

專案須要,須要在數據庫中提供一個些數據,可以讓用戶讀取,但不能修改。
或許你須要建立一個表,手動添加這些靜態數據,這樣的話,用戶有可能直接打開數據庫修改。
也許你會建立一個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的。

試執行此存儲過程:
ide

 

下面內容於2015-04-03 09:40分修改或補充:
針對最後一段代碼,修改以下:
函數

 

SqlContext.Pipe.SendResultsStart(record);
SqlContext.Pipe.SendResultsRow(record);
SqlContext.Pipe.SendResultsEnd();
View Code
相關文章
相關標籤/搜索