SQL Server05迁移Oracle 10g程序修改记录

1.SQL语句中获取当前时间的函数为GETDATE(),Oracle中的获取当前时间的函数为sysdate,把GETDATE()全局替换为sysdate。

2.Oracle中没有AS这个方法,将AS删掉。

3.Oracle中的日期类型在insert的时候需要用to_date('date','yyyy-mm-dd')这个函数,第一个参数是需要存的日期,第二个参数是存储日期的格式。

原来的字符串拼接函数是这样的:

sql2 += ",'" + this.ReguireDate.Text.Replace("'", "''") + "'";

现在有两种改法,一种是比较原始的纯拼接字符串,如下:

sql2 += "," +"to_date('"+ this.StartRemindDate.Text.Replace("'", "''")+"',"+"'"+"yyyy-mm-dd"+"')"; 

第二种是用string.Format(),如下:

string.Format("to_date('{0}','yyyy-mm-dd')", this.ReguireDate.Text.Replace("'", "''")) ; 

拼接出来的结果是完全一样的,不知道到底哪一个执行效率更高一些。

使用string.format()这个函数,可读性好一些。

4.发现在前台对<asp:TextBox/>这个控件添加了ReadOnly="True"之后,如果使用脚本改变了其中的值,比如说用my97Datepicker获取日期并填充这个textbox,在后台是取不到值的。具体的办法还没想好,只能先把ReadOnly="true"属性去掉。现在修改了引用的日期脚本,使得点击确定和取消后都去把无效字符去掉。

5.在SaveBusiness.aspx.cs里面,有一段这样蛋疼的代码:

for (int i = 6; i < count; i++)
{
if (Request.Form.AllKeys.GetValue(i).ToString() == "Reamrk1")
fSQL.Append(
"Reamrk='" + Request.Form[i].Replace("'", "''") + "',");
else
{
if (Request.Form[i] == "")
fSQL.Append(Request.Form.AllKeys.GetValue(i)
+ "=NULL,");
else
fSQL.Append(Request.Form.AllKeys.GetValue(i)
+ "='" + Request.Form[i].Replace("'", "''") + "',");
}
}

之前的这段程序实现的功能是把所有的Request.Form里面的名字不是Reamrk1(-_-!之前的遗留问题,不是我拼错的。。)的时候,就把这个字段添加到Sql语句里面来。这里面是有一个DateTime类型的,需要在第二个else里面加判断,看看是不是FillFormTime,幸亏就这一个FillFormTime,不过写这种代码是非常非常不好的,if和else语句后面都不加{}的,可读性不好,维护起来更难,引以为戒。

现在修改成了:

for (int i = 6; i < count; i++)
{
if (Request.Form[i].Trim().Replace("'", "''") != "")
{
if (Request.Form.AllKeys.GetValue(i).ToString() == "Reamrk1")
{
fSQL.Append(
",Reamrk");
}
else
{
//如果是填表时间的话,就用特定格式
if (Request.Form.AllKeys.GetValue(i).ToString() == "FillFormTime")
{
fSQL.Append(
"," + Request.Form.AllKeys.GetValue(i));
sSQL.Append(
"," + string.Format("to_date('{0}','yyyy-mm-dd')", Request.Form[i].Trim().Replace("'", "''")));
}
else
{
fSQL.Append(
"," + Request.Form.AllKeys.GetValue(i));
sSQL.Append(
",'" + Request.Form[i].Trim().Replace("'", "''") + "'");
}
}
}
}

在For循环里面嵌套两个if。。好吧我也是没办法,整体已经这样了我只能缝缝补补又不能推倒重来。

6.原来在使用MSSQL SERVER的时候,是可以批量处理sql语句的,我们可以直接把很多sql语句直接写成 insert into xx () value() update xx set yy=zz where dd 之类的云云,都可以写,中间什么都不用加就可以直接写。可是在Oracle是必须有结束符";"的,没有这个分号解释器会认为语句未结束,所以加分号是第一步。 加好分号之后,在pl/sql里面一按F8果断给力了,执行成功。

可是在网页中保存还是失败,提示为ORA-00911:无效字符。再一次打断点,获取到Sql语句之后,直接复制粘贴到pl/sql里面来运行,因为语句实在是太长了,就没有对语句进行换行直接运行的,结果也报了错。语句和之前的语句完全一样,为啥能报错呢,这两个语句唯一的区别在于我对第一个语句进行了人工的换行操作,就是每到一个;的时候就人工给换行了,看起来比较舒服。

难道是换行的问题?在只换了一个行之后执行语句,发现果然是换行的问题。可是Oracle中没有换行符啊,在网上搜索之后,大家貌似都指向了一个方法,就是在Sql语句的开始加上Begin,在Sql语句的末尾加上End;(ps.这个分号是必须的)。试验之后果然可以。现在暂时这么修改。只要在最终拼接好的Sql语句上加上一句:

string myNewSql = "begin "+ mySql + " end;";  

但是这么写是有缺陷的,用Begin和End来处理,是使用了Oracle中的事务处理,如果在这个大的事务中嵌套了小的事务,又该怎么办呢?比如说CREATE TABLE就是一个事务操作,如果直接把这个句子添加进来写成:Begin Create Table Test(Test1,Test2); End;会怎么样呢?会报两个错误一个是ORA-06550一个是PLS-00103。报错原因明天补上。

转载于:https://www.cnblogs.com/yangqipeng89422/archive/2011/09/20/2182745.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值