天天看點

在資料庫中提供隻讀資料

專案需要,需要在資料庫中提供一個些資料,可讓使用者讀取,但不能修改。

或許你需要建立一個表,手動添加這些靜态資料,這樣的話,使用者有可能直接打開資料庫修改。

也許你會建立一個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();      

繼續閱讀