zoukankan      html  css  js  c++  java
  • 在数据库中提供只读数据

    专案需要,需要在数据库中提供一个些数据,可让用户读取,但不能修改。
    或许你需要创建一个表,手动添加这些静态数据,这样的话,用户有可能直接打开数据库修改。
    也许你会创建一个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
  • 相关阅读:
    SharePreferences
    Android实现电话录音功能
    Android短信监听实现,及Android4.4之后短信机制变更
    java指纹识别+谷歌图片识别技术_源代码
    找出相似的图片--C#
    vim常用命令整理
    机器学习实战-logistic回归分类
    机器学习实战-朴素贝叶斯垃圾邮件分类
    机器学习实战-随机森林二分类问题
    分类算法
  • 原文地址:https://www.cnblogs.com/insus/p/4384411.html
Copyright © 2011-2022 走看看