Dict.CN 在线词典, 英语学习, 在线翻译

归纳一下,主要有以下几点:
1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。

 

参考:
http://msdn.microsoft.com/en-us/magazine/cc163917.aspx
http://www.unixwiz.net/techtips/sql-injection.html
http://www.nextgenss.com/papers/more_advanced_sql_injectio

posted @ 2010-08-25 16:49 2009cn 阅读(2) | 评论(0) | 编辑

//在当前页面打开

location.href="http://www.google.cn/";

window.location.href="http://www.google.cn/";

//后退到前一页面

history.go(-1);

//在新页面打开

window.open('http://www.google.cn/','','height=500,width=611,scrollbars=yes,status=yes');

每天学习一点点!

posted @ 2010-06-10 11:09 2009cn 阅读(5) | 评论(0) | 编辑

1. javaScript函数中执行C#代码中的函数:

方法一:1、首先建立一个按钮,在后台将调用或处理的内容写入button_click中;

        2、在前台写一个js函数,内容为document.getElementById("btn1").click();

        3、在前台或后台调用js函数,激发click事件,等于访问后台c#函数;

方法二:1、函数声明为public             

          后台代码(把public改成protected也可以)

          public string ss()

          {

              return("a");

          }

        2、在html里用 <%=fucntion()%>可以调用

          前台脚本

          <script language=javascript>

          var a = " <%=ss()%>";

          alert(a);

          </script>

方法三:1、 <script language="javascript">

          <!--

          function __doPostBack(eventTarget, eventArgument)

          {

              var theForm = document.Form1;    //指runat=server的form

              theForm.__EVENTTARGET.value = eventTarget;

              theFrom.__EVENTARGUMENT.value = eventArgument;

              theForm.submit();

          }

          -->

          </script>

          <input type="button" value="按钮" >

       

方法四: <script language="javascript">

function SubmitKeyClick()

{

    if (event.keyCode == 13)

    {

        event.cancelBubble = true;

        event.returnValue = false;

        document.all.FunName.value="你要调用的函数名";

        document.form[0].submit();

    }

}

</script>

<INPUT type="text">

<input type="hidden" > 〈!--用来存储你要调用的函数 --〉

在.CS里有:

public Page_OnLoad()

{

if (!Page.IsPost())

{

string strFunName=Request.Form["FunName"]!=null?Request.Form["FunName"]:"";

//根据传回来的值决定调用哪个函数

switch(strFunName)

{

case "enter()":

enter() ; //调用该函数

break;

case "其他":

//调用其他函数

break;

default:

//调用默认函数

break;

}

}

}

public void enter()

{

//……比如计算某值

}

2.如何在JavaScript访问C#变量?

答案如下:

方法一:1、通过页面上隐藏域访问 <input type="hidden" runat="server">

方法二:1、如后台定义了PUBLIC STRING N;前台js中引用该变量的格式为' <%=n%>'或"+ <%=n%>+"

方法三:1、或者你可以在服务器端变量赋值后在页面注册一段脚本

          " <script language='javascript'>var temp=" + tmp + " </script>"

          tmp是后台变量,然后js中可以直接访问temp获得值。

3.如何在C#中访问JavaScript的已有变量?

答案如下:

方法一:1、前台使用静态文本控件隐藏域,将js变量值写入其中;

        2、后台用request["id"]来获取值;

方法二:可以用cookie或session

4.如何在C#中访问JavaScript函数?

答案如下:

c#代码中执行javaScript函数:

方法一:1、Page.RegisterStartupScript("ggg"," <script>SetVisible(1); </script>");

方法二:使用Literal类,然后

private void Button2_Click(object sender, System.EventArgs e)

{

string str;

str=" <script language='javascript'>";

str+="selectRange()";

str+=" </script>";

//Literal1.Visible=true;

Literal1.Text=str;

}

每天学习一点点!

posted @ 2010-06-10 11:06 2009cn 阅读(7) | 评论(0) | 编辑


1:添加log4net.dll引用
2:建Log4Net.config  
      包含具体设置参数
3: Global.asax
   protected void Application_Start(object sender, EventArgs e)
  {
            log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Server.MapPath("~") + @"\Log4Net.config"));
        }
4:代码使用实例
   protected void Button1_Click(object sender, EventArgs e)
        {
        
            log4net.ILog Logger = log4net.LogManager.GetLogger(this.GetType());
            Logger.Info("log test test log");
        }

 

Log4NET配置与使用实例.rar

posted @ 2010-06-08 18:02 2009cn 阅读(16) | 评论(0) | 编辑

1,写log之前一定要初始化配置文档,相关代码如下:

 

1 log4net.Config.XmlConfigurator.Configure(); //默认的
2  
3 log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(System.Web.HttpContext.Current.Server.MapPath("../Log4Net.config")));

2.配置文件样本

01 Log4net.config配置文件的内容:
02 <?xml version="1.0" encoding="utf-8"?>
03 <log4net>
04   <logger name="KangarooLog">
05     <!--control log level: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
06     <!--如果没有定义LEVEL的值,则缺省为DEBUG-->
07     <level value="ALL" />
08     <!--<appender-ref ref="SmtpAppenderKangaroo"></appender-ref>-->
09     <appender-ref ref="FileAppenderKangaroo"></appender-ref>
10   </logger>
11   <appender name="SmtpAppenderKangaroo" type="log4net.Appender.SmtpAppender">
12     <to value="Kangaroo@800best.com"></to>
13     <from value="Kangaroo@800best.com" />
14     <subject value="Kangaroo Log Message" />
15     <smtpHost value="smtp.800best.com" />
16     <username value="Kangaroo" />
17     <password value="Kangaroo" />
18     <bufferSize value="2048" />
19     <!--超长部分是否丢弃-->
20     <lossy value="false" />
21     <!--evaluator时好时坏,靠不住,还是用filter实在-->
22     <!--<evaluator type="log4net.Core.LevelEvaluator">
23       <threshold value="ERROR"/>
24     </evaluator>-->
25     <!--<evaluator type="log4net.Core.LevelEvaluator,log4net">
26       <threshold value="WARN" />
27     </evaluator>-->
28     <!--将导致不能写日志-->
29     <!--<filter type="log4net.Filter.DenyAllFilter" />-->
30     <!--输出级别在定义之间的日志-->
31     <filter type="log4net.Filter.LevelRangeFilter">
32       <param name="LevelMin" value="ALL" />
33       <param name="LevelMax" value="OFF" />
34     </filter>
35     <layout type="log4net.Layout.PatternLayout">
36       <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] : %newline%message%newline" />
37     </layout>
38   </appender>
39   
40  <appender name="FileAppenderKangaroo" type="log4net.Appender.RollingFileAppender">
41     <!--绝对路径-->
42     <!--<file value="D:\KangarooLog.txt"></file>-->
43     <param name="File" value="./Log/KangarooLog.log" />
44     <param name="AppendToFile" value="true" />
45     <!--相对路径,在项目的根目录下-->
46     <!--以最后一个路径为准,所以上面的绝对路径下不会写日志-->
47     <!--<file value="./Log/Kangaroo.txt"></file>-->
48     <!--防止多线程时不能写Log,官方说线程非安全-->
49     <!--实际使用时,本地测试正常,部署后有不能写日志的情况-->
50     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
51     <appendToFile value="true" />
52     <!--可以为:Once|Size|Date|Composite-->
53     <!--Composite为Size和Date的组合-->
54     <rollingStyle value="composite" />
55     <!--日志最大个数,都是最新的-->
56     <!--rollingStyle节点为Date时,该节点不起作用-->
57     <!--rollingStyle节点为Size时,只能有value个日志-->
58     <!--rollingStyle节点为Composite时,每天有value个日志-->
59     <maxSizeRollBackups value="10" />
60     <!--当备份文件时,为文件名加的后缀-->
61     <!--后缀为*.txt时,例:AX.txt_2008-07-24.PxP  应该是程序上的一个bug-->
62     <!--后缀为*.TXT时,例:AX.txt_2008-07-25.TXT-->
63     <datePattern value="_yyyy-MM-dd.TXT" />
64     <!--可用的单位:KB|MB|GB-->
65     <!--不要使用小数,否则会一直写入当前日志-->
66     <maximumFileSize value="2MB" />
67     <!--置为true,当前最新日志文件名永远为file节中的名字-->
68     <staticLogFileName value="true" />
69     <!--输出级别在INFO和ERROR之间的日志-->
70     <filter type="log4net.Filter.LevelRangeFilter">
71       <param name="LevelMin" value="INFO" />
72       <param name="LevelMax" value="ERROR" />
73     </filter>
74     <!--必须结合起来用,第一个只过滤出WARN,第二个拒绝其它其它日志输出-->
75     <filter type="log4net.Filter.LevelMatchFilter">
76       <param name="LevelToMatch" value="WARN" />
77     </filter>
78     <filter type="log4net.Filter.DenyAllFilter" />
79     <layout type="log4net.Layout.PatternLayout">
80       <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
81     </layout>
82   </appender>
83 </log4net>

3. layout节点的配置说明

01 <!--                                                                        Made By AX      -->
02 <!--        %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息                          -->
03 <!--        %n(new line):换行                                                                   -->
04 <!--        %d(datetime):输出当前语句运行的时刻                                                 -->
05 <!--        %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数                           -->
06 <!--        %t(thread id):当前语句所在的线程ID                                                  -->
07 <!--        %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等                           -->
08 <!--        %c(class):当前日志对象的名称,例如:                                                -->
09 <!--               模式字符串为:%-10c -%m%n                                                    -->
10 <!--               代码为:                                                                     -->
11 <!--        ILog log=LogManager.GetLogger(“Exam.Log”);                                        -->
12 <!--        log.Debug(“Hello”);                                                               -->
13 <!--            则输出为下面的形式:                                                            -->
14 <!--        Exam.Log       - Hello                                                              -->
15 <!--        %L:输出语句所在的行号                                                              -->
16 <!--        %F:输出语句所在的文件名                                                            -->
17 <!--        %-数字:表示该项的最小长度,如果不够,则用空格填充                                  -->
18 <!--        例如,转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出: -->
19 <!--        176 [main] INFO  org.foo.Bar - Located nearest gas station.                         -->

4.有用的连接:

日志维护一点心得

日志维护一点心得二

posted @ 2010-06-08 16:45 2009cn 阅读(11) | 评论(0) | 编辑

默认情况下,Visio是不支持Mysql数据反向工程的,不过通过以下方法可以实现Visio对Mysql的支持。
1、从MySQL网站下载最新的MySQL ODBC connector:http://dev.mysql.com/downloads/connector/odbc/5.1.html,然后进行安装。
2、打开Visio,“文件”->“新建”->“软件和数据库”->“数据库模型图”,然后“数据库”->“反向工程”,在弹出的对话框中选择“新建”->“系统数据源”,下一步,从下拉列表中选择“MySQL ODBC 5.1 Driver”,下一步,完成,在弹出的对话框中输入相应的参数,点击“OK”。
3、接下来就可以使用mysql数据进行反向工程了。

posted @ 2010-05-22 19:11 2009cn 阅读(41) | 评论(0) | 编辑
posted @ 2010-05-22 19:07 2009cn 阅读(13) | 评论(0) | 编辑

 

--
ALTER PROCEDURE [dbo].[tb_ADD]
@a int,
@b(20),

 AS
    BEGIN
        
        --开始事务
        begin tran
        if  exists(select ID from tbwhere a=@a and b=@b )
            begin
                rollback tran
                return -1--该记录已存在.
            end


        INSERT INTO [tb]( [a],[b] )VALUES(@a,@b    )

 

        IF @@error <> 0
            BEGIN
                rollback tran
                return 0--失败
            END
        else
            begin
                commit tran
                return 1    --成功
            end
    END

 

posted @ 2010-05-20 16:37 2009cn 阅读(9) | 评论(0) | 编辑
     摘要: 数据操作类 SQLHelper.cs http://www.cnblogs.com/zengxiangzhan/archive/2009/12/31/1636871.html无限级分类 存储过程 http://www.cnblogs.com/zengxiangzhan/archive/2010/01/04/1639220.html百万级分页存储 http://www.cnblogs.com/zen...  阅读全文
posted @ 2010-05-12 22:29 2009cn 阅读(3) | 评论(0) | 编辑
     摘要: 采用软件负载均衡器实现web服务器集群我用nginx实现网站负载均衡测试的例子,windows下IIS做负载实测.如果你的网站访问量(pv)越来越高,一台服务器已经没有办法承受流量压力,那就增多几台WEB服务器来做负载吧。做网站负载可以买硬件设备来实现,我们公司用的是F5,不过价格就几十万到上百万,太贵了,目前好多门户网站与大访问量的网站都在使用nginx做为HTTP服务器,所以nginx是非常优...  阅读全文
posted @ 2010-05-12 09:15 2009cn 阅读(19) | 评论(0) | 编辑