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。报错原因明天补上。