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

posted @ 2012-02-07 17:21  devbian  阅读(434)  评论(3编辑  收藏  举报