qfzhang

好好学习,天天向上!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

编程中遇到的小问题

Posted on 2013-02-24 22:26  qfzhang  阅读(287)  评论(0编辑  收藏  举报

1. Oracle中,对于Number(p,d)数据类型,如果数据的整数部分超出,则会报出异常,如果是小数部分长度超出,则会自动截断。

 

2. 在.Net中使用微软提供的Oracle数据访问提供程序时,如果遇到较大的Number类型时,则可能会报出OCI-22053溢出错误。原因:过大的Number类型在.Net平台中没有对应的数据类型(可采用OracleNumber 类接收)。解决方法:采用Oracle自身的提供程序也可解决(未尝试)。参见:http://www.iwms.net/n1249c18.aspx

 

3. 在Oracle参数化绑定时,参数的值不能使用.NET内置的数据类型,而需要采用Oracle特定的类型,如OracleNumber、OracleDate等,Null值也需要使用OracleNumber.Null或OracleDate.Null来处理。

 

4. 将txt文件的扩展名改为udl,可以直接打开数据链接工具来生成连接字符串。

 

5. Visual studio的查找和替换窗口中,使用正则表达式替换时需注意的技巧:反向引用(使用匹配结果中的部分内容)来替换时,在“查找内容”中使用{内容}来捕获匹配,在“替换为”中使用\数字(如:\1)来使用匹配结果。如:将所有的<IMyService>替换为MyService。可以将\<{IMyService}\>替换为:\1

 

6. 水晶报表A3打印时,预览页面时纸张为A4大小,显示不正常,后面的列超出纸张范围。经检查为本机打印机驱动错误,认不出A3纸张。删除错误驱动重装后,异常排除。

 

7.window.showModalDialog()弹出的窗体中,对于Response.Write方式实现文件下载,是不能正常运行的(window.open无此情况)。解决方式:在弹出的窗体中,嵌套iframe,将其src指向真正要显示的页面。此方式可绕过showModalDialog()的限制。另外,模式对话框会有被自动缓存的问题和回发时弹出非模式窗口的问题。可在对话框页面插入:<META http-equiv="Pragma" content="no-cache" /> 和 <base target="_self"/>来解决此问题。

 

8.在GET方式请求中,如果查询参数中包含一些类似于SQL语句查询条件或排序条件(如:?Filter=escape(‘ag=1 and b2=2’)&OrderCol=escape('aaa desc'))时,在弹出对话框时,会被IE8拦截,并显示“跨站脚本被阻止”。此问题可在Page_Load中加入以下语句来解决:Response.AddHeader("X-XSS-Protection", "0");

 

9.IE6、IE7、FireFox通用代码(无提示关闭window): 
    window.opener=null;     window.open('','_self');     window.close();

或window.open('','_parent','');    window.close();


10. 伪Ajax(采用隐藏iframe)响应为文件流时回调打开窗口中的函数(Ajax不能返回文件流):

    //思路:先生成文件,然后请求至一个页面,采用此页面来回调功能并输出此文件,其中返回Action.aspx文件部分代码如下:

    Response.Write("<script>parent.document.getElementById('btnSecurityRisk').disabled=true;</script>");
    Response.Write(string.Format("<script>window.open('FileDownload.aspx?File={0}',null,'height=1, width=1,top='+((screen.availHeight-1)/2)+',left='+((screen.availWidth-1)/2));</script>", Server.UrlEncode("~/File/PdfTemp/" + fi.Name)));

 

11. Oracle使用date和timestamp关键字将字符串转换为日期型:

        SELECT DATE'2010-11-12' FROM dual;
        SELECT timestamp'2010-12-31 21:10:2' FROM dual;

 

12. JQuery ajax调用asp.net的webMethod问题

        .Framework 3.5中,无需特殊设置,可以直接用$.ajax调用在aspx.cs中,访问级别public,静态的,标记为【webmethod】的方法。
        jquery代码:$.ajax({type:"post",url:"default.aspx/functionname",contentType:"application/json", success:function(a){alert(a.d);}} 

        至于没有参数的data,可写可不写。并不是必须的。
        2.0中,首先在配置文件中加上:<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </httpModules>就可以和3.5中一样使用了。
        至于在页面类声明前加scriptservice也不是必须的。

 

13. ashx一般处理程序不能使用Session的问题:让ashx程序实现IRequiresSessionState接口即可。

 

14. js中的appendChild(node)方法在IE6/7下无效Bug的解决方法:在table动态复制行时,在IE6、7下无效。如:
var tr=tbl.rows[tbl.rows.length-1].cloneNode(true);  
tbl.appendChild(tr);    //IE6/7不兼容,可使用jquery来代替:$(tbl).append(tr);
以上代码在IE6/7中,并不能实现在表格最后添加一行的目的,并使用jquery来解决。

 

15. MVC3的Razor语法中,对于<div id=cate_content_block_@item.CategoryID />语法不能正常解析。需要使用<div id=cate_content_block_@(item.CategoryID) />才可以,即需要通过括号来输出变量才能正常编译。