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