• Dynamic Business代码片段总结


    从做.net开发开始,就没写过博客了,以前的tuxhome.cublog.cn也停止了更新。

    现在猛然发觉,不写博客,好多东西都会忘记。特别是一些小的技术点,下次要用时,又得重头再查,浪费时间不说,还了解的很不系统。

    下面就总结下自己以前项目中一些知识点:

    1.

    Q: Silverlight如何访问Oracle中的数据?

    A:silverlight只是一个前端,用来进行RIA开发,所以其不能直接访问数据库,需要通过WCF。先是silverlight对wcf发出了读取数据的请求,然后wcf访问数据库,将其转为流或序列化后,传给silverlight进行显示。

    ex:

    在silverlight端,有一个服务引用,SpaceOperaOracle。

    SpaceOperaOracle.FolderInfo folderinfo = selectedTreeView.DataContext as SpaceOperaOracle.FolderInfo;
    client.GetDatabyNameCompleted += new EventHandler<SpaceOperaOracle.GetDatabyNameCompletedEventArgs>(mClient_GetDatabyNameCompleted);

    在 void mClient_GetDatabyNameCompleted(object sender, SpaceOperaOracle.GetDatabyNameCompletedEventArgs e)

    方法中,e.Result就是通过wcf传来的数据。

    2.

    Q: silverlight如何在datagrid中显示动态类型数据?

    A: 如果在silverlight的datagrid中显示的数据为固定类型,则可以很方便地从wcf端得到序列化后的数据串,再以些类型反序列化过来就可以了。

    但由于是动态类型,则更为麻烦一点。又由于silverlight中不支持dataset,这时,就可以使用一个开源版本的silverlight dataset.

    http://silverlightdataset.net/silverlightdataset/Default.aspx

    3.

    Q: 在配置wcf的oracle数据库时,若数据库名、用户名或密码名不相同时,应该怎么做才做更加灵活?

    A: 由于要进行配置,这时,就不能把数据库名,用户名,密码直接写进代码里,得以配置文件的方式来进行。由于是web程序,将这些写在web.config里就可以。

    code:

    <appSettings>
        <add key="DataConnection" value="ORCL"/>
        <add key="UserName" value="green"/>
        <add key="UserPassword" value="pera"/>
    </appSettings>

    再通过一个类,里面都是静态的方法,来访问这个配置文件。

    public class DataConfigManager
        {
            public static string DBName
            {
                get
                {
                    return System.Configuration.ConfigurationManager.AppSettings["DataConnection"];
                }
            }
     
            public static string UserName
            {
                get
                {
                    return System.Configuration.ConfigurationManager.AppSettings["UserName"];
                }
            }
     
            public static string UserPassword
            {
                get
                {
                    return System.Configuration.ConfigurationManager.AppSettings["UserPassword"];
                }
            }
        }

    4.

    Q: 有时Silverlight访问wcf时,会出现权限不足的问题,如何解决?

    A: 出现以上问题,一般就是跨域的问题了。在web程序时,加入clientaccesspolicy.xml,crossdomain.xml两个文件就可。

    clientaccesspolicy.xml:

    <?xml version="1.0" encoding="utf-8" ?>
    <access-policy>
      <cross-domain-access>
        <policy>
          <allow-from>
            <domain uri="*"/>
          </allow-from>
          <grant-to>
            <resource path="/" include-subpaths="true"/>
          </grant-to>
        </policy>
      </cross-domain-access>
    </access-policy>

    crossdomain.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <cross-domain-policy>
      <allow-access-from domain="*" />
    </cross-domain-policy>

    5.

    Q:如何在Oracle中建一张表,以ID为自增主键,自增的幅度为1?

    A: 要为这个表建一个序列。

    code:

    CREATE TABLE soulcardtables(
      ID Number(4) NOT NULL PRIMARY KEY,
      Filename VARCHAR(25),
      FilePath VARCHAR(200),
      FileSoul clob );
     
    CREATE SEQUENCE emp_sequence2
      INCREMENT BY 1 -- 每次加几个
      START WITH 1 -- 从1开始计数
      NOMAXVALUE -- 不设置最大值
      NOCYCLE -- 一直累加,不循环
      NOCACHE -- 不建缓冲区

    插入时:

    insert into soulcardtables(filename,filepath, filesoul,id) values('table5','liang','cool',green.emp_sequence2.nextval);

    如果这时,你的filesoul字段为字符串,并且长度大于4000,这时,你若用PL/SQL直接将字符串插入,会弹出一个字符串过长的错误,这时我们也许就会疑惑:明明是 clob类型,其可以存4g的数据,怎么连区区大于4000长度的字符串都存不了,这其实是因为oracle的一个优化所致。因为oracle看到你这些全是字符,oracle会"智能"地认为,你这个为字符串类型,用来节省开支,所以就以nvarchar2类型来存,这时,出现字符串过长就不足为奇了。这时,你就得用declare的方法来解决这个问题:

    declare
    v_clob clob;
    begin
    v_clob :='长字符串';
    insert into soulcardtables(filename,filepath, filesoul,id) values('table5','liang',v_clob,green.emp_sequence2.nextval);
    end;

    这时,你就可以很顺利的将长字符插入了。

    ps: 以上只是自己工作中的一些简单总结,别人看了可能感觉没什么用,但可以方便自己查找。这也算自己在龙年重捡写博客的习惯吧,希望再次坚持下去。

  • 相关阅读:
    Android中Handler与Message的简单实例
    折腾蛋疼的Ubuntu1204LTS的U盘安装
    sgs_intro
    把杀某程序封装成sh
    boost 程序库完全开发_ch4_utility
    VS2005 warning C4819处理办法(提示代码页有不兼容的字符)
    Ubuntu1204LTS下xynxyc编译Emacs24.02
    当VS05调试赋值不对时,小心只是IDE的watch在骗你.....
    很好的boost学习资料
    C++实现Creational Singleton模式
  • 原文地址:https://www.cnblogs.com/phnix/p/2341717.html
Copyright © 2020-2023  润新知