自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(568)
  • 资源 (8)
  • 收藏
  • 关注

原创 关于数据库批量注入,及批量清除的方法[原创]

以下代码为我幸苦所得,如需转载请保留原出处首发 www.yangxiaoyong.com 杨小勇--批量注入字符串DECLARE @T varchar(255),@C varchar(255)DECLARE Table_Cursor CURSORFOR select a.name,b.namefrom sysobjects a,syscolumns bwhere a.id = b.idand a.

2009-03-10 10:00:00 1179 1

原创 IP 地址数值互转,多种方法原创

以下几种算法暂时不知道那种算法效率最快,请高手分析一下。转载请注明出处:SQL吧技术先锋www.sql8.net  http://www.sql8.net/showtopic-414.aspx作者:杨小勇protected void Page_Load(object sender, EventArgs e)    {        Response.Write("ip1:" + numtoip1(

2008-08-06 12:01:00 842

原创 如何有效突破微信每天限加20个好友的技巧

经常有人问我加好友软件,一键添加好友,而且还有个号称七天加满5000的某手机神器,下边先看下规则再评论!目前微信朋友圈加好友已经做了严苛的限制:查找加好友每天只能加20个左右,加多了会提示“查找失败”。打开你的微信,随便找一个朋友,在聊天对话框中输入80886.net并发送 再点击80886.net这个网址,打开80886资料库在搜索框中输入您要搜索的信息,比如"化装品",点击搜一搜...

2019-04-15 18:11:41 9530 3

转载 MySQL按天,按周,按月,按时间段统计【转载】

自己做过MySQL按天,按周,按月,按时间段统计,但是不怎么满意,后来找到这位大神的博客,转载一下,谢谢这位博主的分享知识点:DATE_FORMAT使用示例select DATE_FORMAT(create_time,'%Y%m%d') days,count(caseid) count from tc_case group by days;select DATE_FORMAT(create_tim...

2018-04-26 02:01:42 410

转载 MySQL 按周,月,季度,年查询

一、年度查询查询 本年度的数据[sql] view plain copy<span style="font-size:18px;">SELECT *  FROM tableName  WHERE year( tableName.timer ) = year( curdate( ))</span>  tableName为表明,timer是日期类型的字段。year()用于计算日...

2018-04-26 02:01:06 6281

转载 awk按照多个分隔符进行分割

我们知道awk可以进行类似于cut之类的操作,如一个文件data如下zhc-123|zhanghongchangfirst-99|zhanghongchang-100|zhang如果我们awk -F ‘-’ ‘{print $1;}’ data会打印出zhchongchangfirsthongchang

2014-10-11 21:45:13 1226

转载 用 uniq 除去重复行(Shell技巧1)

用uniq除去重复行(转载IBM developerWorks 中国) 重复行通常不会造成问题,但是有时候它们的确会引起问题。此时,不必花上一个下午的时间来为它们编制过滤器,uniq 命令便是唾手可得的好工具。了解一下它是如何节省您的时间和精力的。进行排序之后,您会发现有些行是重复的。有时候该重复信息是不需要的,可以将它除去以节省磁盘空间。不必对文本行进行排序,但是您应当记住 uniq 在

2014-10-11 00:50:09 2504

转载 date命令的帮助信息

date命令的帮助信息[root@localhost source]# date --help用法:date [选项]... [+格式] 或:date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]以给定的格式显示当前时间,或是设置系统日期。-d,--date=字符串 显示指定字符串所描述的时间,而非当前时间-f,--fil

2014-10-11 00:05:36 751

转载 shell中if做比较

比较两个字符串是否相等的办法是:if [ "$test"x = "test"x ]; then这里的关键有几点:1 使用单个等号2 注意到等号两边各有一个空格:这是unix shell的要求3 注意到"$test"x最后的x,这是特意安排的,因为当$test为空的时候,上面的表达式就变成了x = testx,显然是不相等的。而如果没有这个x,表达式就会报错:

2014-10-10 23:54:07 1002

转载 linux shell substr(分割字符串)

原来在shell中如果遇到要截取字符串的情况,就调用awk中的substr来实现。今天了解到一种新的方法,原来shell中本身就支持这种用法。如,有一字符串”12345678″,现在要截取第三个到第六个字符的字符串区间。则可以:[xok.la ~]$ export str="123456789"[xok.la ~]$ echo ${str:3:(6-3)}456[x

2014-10-08 23:52:40 35907

转载 [Shell]判断目录读写权限

学习shell小练习判断/tmp/lzz 这个目录是否有读写权限,如果没有则添加权限#!/bin/bash#name: testdir.sh#authro: orangleliu#date: 2014-08-03#version: v1.0#===================TestDir="/tmp/lzz"#===================

2014-10-08 23:39:34 2514

转载 Redhat linux 系统的负载与CPU、内存、硬盘、用户数监控shell脚本

【分享】利用shell脚本来监控linux系统的负载、CPU、内存、硬盘、用户登录数这几天在学习研究shell脚本,写的一些系统负载、CPU、内存、硬盘、用户数监控脚本程序。在没有nagios监控的情况下,只要服务器能上互联网,就可通过发邮件的方式来提醒管理员系统资源的使用情况。一、编写linux系统告警邮件脚本# vim /scripts/sys-warning.sh#!/b

2014-10-08 00:03:58 695

转载 利用shell脚本来监控linux系统的内存

这几天在学习研究shell脚本,写的一些内存监控脚本程序。在没有nagios监控软件的情况下,只要服务器能上互联网,就可通过发邮件的方式来提醒管理员系统内存的使用情况。一、安装linux下面的一个邮件客户端msmtp软件(类似于一个foxmail的工具)1、下载安装: http://downloads.sourceforge.net/msmtp/msmtp-1.4.16.tar.bz2?m

2014-10-08 00:03:01 1202

转载 Shell 显示带颜色字体

格式: echo "/033[字背景颜色;字体颜色m字符串/033[控制码"如果单纯显示字体颜色可以固定控制码位0m。格式: echo "/033[字背景颜色;字体颜色m字符串/033[0m"字背景颜色范围:40 - 4940:黑 41:深红 42:绿 43:黄色 44:蓝色 45:紫色 46:深绿 47:白色 字颜色:30 -

2014-10-07 23:44:35 604

转载 Shell for&while 循环详细总结

#!/usr/bin/ksh#数字段形式for i in {1..10}do   echo $idone#详细列出(字符且项数不多)for File in 1 2 3 4 5 do     echo $File done#对存在的文件进行循环for shname in `ls *.sh`do           name=`ech

2014-10-07 23:35:30 553

转载 利用shell脚本来监控linux系统的负载与CPU占用情况

这几天在学习研究shell脚本,写的一些系统负载与CPU监控脚本程序。在没有nagios监控软件的情况下,只要服务器能上互联网,就可通过发邮件的方式来提醒管理员系统负载与CPU占用的使用情况。一、安装linux下面的一个邮件客户端msmtp软件(类似于一个foxmail的工具)1、下载安装: http://downloads.sourceforge.net/msmtp/msmtp-1.4.

2014-10-07 23:34:50 788

转载 Linux Shell高级技巧(一)

该系列将重点介绍Linux Shell中的高级使用技巧,其主要面向有一定经验的Shell开发者、Linux系统管理员,以及Linux的爱好者。博客中的示例主要来源于网络和一些经典书籍,在经过本人的收集和整理之后,以系列博客的形式呈现给诸位。如果大家有更多更好的Shell脚本经典示例,且愿意在这里与我们一同分享的话,可以以邮件、博客回复等形式与我联系,我将会尽量保证该系列的持续更新。一、将输

2014-09-30 19:02:23 560

转载 Linux Shell高级技巧(二)

七、非直接引用变量:      在Shell中提供了三种为标准(直接)变量赋值的方式:      1. 直接赋值。      2. 存储一个命令的输出。      3. 存储某类型计算的结果。      然而这三种方式都是给已知变量名的变量赋值,如name=Stephen。但是在有些情况下,变量名本身就是动态的,需要依照运行的结果来构造变量名,之后才是为该变量赋值。这种变量

2014-09-30 19:01:35 555

转载 Linux shell你所不知道的$($*和$@)

在$的相关的特殊符号中,有以下的几种需要注意的区别1)* 和 @在shell中虽然都是展开位置参数可以用$@和$*,但是两种有很大的差别,特别是在双引号的扩展下,比如(a)for i  in $*; do     echo "--$i"done(b)

2014-09-30 18:30:02 584

转载 Shell编程-文件读取方法集锦

1 ,在这里总结一下Shell读取文件的方法[plain] view plaincopya),  #使用read命令读取一行数据  while read myline  do      echo "LINE:"$myline  done   b),  #使用read命令读取一行数据  cat datafile.tx

2014-09-30 02:38:45 584

转载 shell中for循环总结

关于shell中的for循环用法很多,一直想总结一下,今天网上看到上一篇关于for循环用法的总结,感觉很全面,所以就转过来研究研究,嘿嘿...1、 for((i=1;i2、在shell中常用的是 for i in $(seq 10)3、for i in `ls`4、for i in ${arr[@]}5、for i in $* ; do6、for File in /proc

2014-09-30 01:32:27 559

转载 如何判断命令行的参数是不是一个数字?

如何判断命令行的参数是不是一个数字?$cat _chk#!/bin/ksh#var=$(echo $1|bc 2>/dev/null)if [[ $var != $1 ]]        then        echo "$1 isn't a number!"        exit 1fiif echo $1|grep "\." >/de

2014-09-30 00:40:43 1492

转载 shell脚本中的参数判断

最近在看ABS这本神作。分享一下今天学到的东西。需求:在练习最大公约数这个脚本的时候,需要判断输入的参数一定是整数,其他情况则正常退出。实现:用求最大公约数这个例子来实现。代码如下:#!/bin/bash# gcd.sh: 求最大公约数# date: 2011.08.10# modified: Nigel_Zeng# license:

2014-09-30 00:37:00 1007

转载 shell中的条件判断、参数以及变量替换

一、test命令  test命令是shell内部命令,它计算作为其参数的表达式是真还是假。  如果表达式为真,则test返回0(注意与C语言0表示false不同),如果表达式为假,返回非0。  shell提供了另外一个调用test命令的方式,就是用方括号[]来代替单词test。  调用test命令的格式为:    test expr1 opr expr2 或是 [ expr1

2014-09-30 00:36:16 614

转载 判断Shell程序输入参数的个数

if [ $# != 1 ] ; then echo "USAGE: $0 TABNAME" echo " e.g.: $0 CDR_CALL_20040701" exit 1; fi 位置参数 $1, $2,..., $N,$#代表了命令行的参数数量, $0代表了脚本的名字 -ne    不等于 ----------------------- shell

2014-09-30 00:34:32 963

转载 jsp中freemarker 数字格式化

一、使用内建函数 c  特点:  不管其表现形式是怎样的(  例如"123,456.123,456"、 "123 456.123 456"、 "000 123 456.123 456 000"、 "123,456.123 456"、 "1,2345,6.123456")  , 只要小数分割符是'.' 它就能转化成计算机能够识别的字符串形式,而且都是123456.123456,计算机

2014-09-16 16:29:49 552

转载 管理lnmp常用命令,lnmp重启,start|stop|reload|restart等命令

LNMP状态管理命令:LNMP状态管理: /root/lnmp {start|stop|reload|restart|kill|status}Nginx状态管理:/etc/init.d/nginx {start|stop|reload|restart}MySQL状态管理:/etc/init.d/mysql {start|stop|restart|reload|force-reload|

2014-09-10 10:25:09 5463

转载 CentOS卸载默认JAVA并安装新的JDK .

[root@node1 node1]# java -versionjava version "1.5.0"gij (GNU libgcj) version 4.4.4 20100726 (Red Hat 4.4.4-13)Copyright (C) 2007 Free Software Foundation, Inc.This is free software; see t

2014-09-02 16:33:55 677

转载 CentOS下安装JDK6u21和设置环境变量

1.先通过SSH登录到Linux系统中,通过SSH文件管理工具把Linux的JDK安装包上传到/home/acm/JavaTools/JDK目录;2.进入/home/acm/JavaTools/JDK目录,用cp命令$cp ./jdk-6u21-linux-i586.bin /home/acm 把JDK安装文件jdk-6u21-linux-i586.bin 复制到acm用户的根目录下;

2014-09-02 15:51:39 851

转载 JSON-lib框架,转换JSON、XML不再困难

Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象。一、 准备工作 1、 首先要去官方下载json-lib工具包下载地址:http://sourceforge.net/projects/json-lib/files/json-l

2014-09-01 15:05:17 568

转载 Linux下 config/configure/Configure、make 、make test/make check、sudo make install 的作用 .

这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤config/configure/Configure这个是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,比如:

2014-08-26 17:35:37 734

转载 ./configure,make,make install的作用

这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤。./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。make是用来编译的,它从Makefile中读取指令,然后编译。make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。

2014-08-26 15:07:47 461

转载 Linux安装配置php

1.获取安装文件: http://www.php.net/downloads.php  php-5.3.8.tar.gz  获取安装php需要的支持文件:http://download.csdn.net/download/netlong339/1351852     libxml2-2.6.32.tar.gz2.安装libxml21 tar zxvf libxml2-2.6

2014-08-26 14:45:12 508

原创 AH02432: Cannot find LB Method: byrequests

#to resolve the start failed issue:#AH02432: Cannot find LB Method: byrequests#AH01183: Cannot share balancer#AH00020: Configuration Failed, exiting LoadModule lbmethod_byrequests_module mod

2014-08-26 11:07:03 5957

转载 Failed to lookup provider 'shm' for 'slotmem': is mod_slotmem_shm loaded??

如果你遇到了服务无法启动的情况,也不报错的,查看logs下的日志,首次安装报错如下:AH01177: Failed to lookup provider 'shm' for 'slotmem': is mod_slotmem_shm loaded??我想日志已经说的很清楚了,这里编译安装后,配置文件conf/httpd.conf没有开启mod_slotmem_shm模块,编辑该文件,放开

2014-08-26 10:56:50 7022

转载 Apache通过http_proxy配置Tomcat(负载均衡/端口转发)

[端口转发配置]      通过http_proxy做tomcat的端口转发:      描述:将远程服务器映射到本地服务器的URL空间      语法:ProxyPass [路径] !|url [键=值 键=值 ...]] [nocanon]       上下文: server config, virtual host, directory      状态:扩展     

2014-08-26 10:41:26 3432

转载 Apache HTTP Server 与 Tomcat 的三种连接方式介绍

首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接。事实上 Tomcat 本身已经提供了 HTTP 服务,该服务默认的端口是 8080,装好 tomcat 后通过 8080 端口可以直接使用 Tomcat 所运行的应用程序,你也可以将该端口改为 80。既然 Tomcat 本身已经可以提供这样的服务,我们为什么还要引入 Apache 或者其他的一些专门的 HTTP 服务器

2014-08-26 10:36:50 524

转载 Apache配置详解(最好的APACHE配置教程)

From: http://aiks.blog.com.cn/archives/2006/1748482.shtml Apache的配置 Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd.conf文件中修改。 主站点的配置(基本配置) (1) 基本配置: ServerRoot "/mnt/software/apache2" #你的a

2014-08-26 10:28:42 685

转载 VI命令使用(查找替换)

esc:   命令模式与插入模式的切换一、vi查找:    当你用vi打开一个文件后,因为文件太长,如何才能找到你所要查找的关键字呢?在vi里可没有菜单-〉查找,              不过没关系,你在命令模式下敲斜杆(/)这时在状态栏(也就是屏幕左下脚)就出现了 “/”然后输入你要查找的关键字              敲回车就可以了。如果你要继续查找此关键字,敲字符n就可以继续

2014-08-26 10:13:45 549

转载 AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.168.

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.168.27.180. Set the 'ServerName' directive globally to suppress this messagehttpd (pid 24484) already

2014-08-26 10:11:40 1549

jQueryAPI,ajax十分好用

jQuery 核心函数 jQuery(expr, [context]) jQuery(html, [ownerDoc]) jQuery(html, props) jQuery(elements) jQuery() jQuery(callback) jQuery 对象访问 each(callback) size() length selector context get() get(index) index(subject) 数据缓存 data([name] , [value]) data(obj) removeData(name) $.data([el], [key], [val]) 队列控制 queue(name ,[cb|queue]) dequeue(name) clearQueue([queueName]) 插件机制 jQuery.fn.extend(object) jQuery.extend(object) 多库共存 jQuery.noConflict([ex]) 属性 属性 attr(name) attr(properties) attr(key, value) attr(key, fn) removeAttr(name) CSS 类 addClass(class | fn) removeClass([class | fn]) toggleClass(class|fn [, sw]) HTML代码/文本/值 html( [val | fn] ) text( [val | fn] )

2012-05-14

delphi动态虚拟覆盖重载重定义的区别

DELPHI中方法的类型及其覆盖、重载 1、静态方法是方法的缺省类型,对它就像对通常的过程和函数那样调用,编译器知道这些方法的地址,所以调用一个静态方法时它能把运行信息静态地链接进可执行文件,所以,静态方法速度最快,但它们却不能被覆盖来支持多态性。 2、虚拟方法和静态方法的调用方式相同。由于虚拟方法能被覆盖,在代码中调用一个指定的虚拟方法时编译器并不知道它的地址,因此,编译器通过建立虚拟方法表(VMT)来查找在运行时的函数地址。所有的虚拟方法在运行时通过VMT来高度,一个对象的VMT表中除了自己定义的虚拟方法外,还有它的祚的所有的虚拟方法,因此虚拟方法比动态方法用的内存要多,但它执行得比较快。 3、动态方法跟虚拟方法基本相似,只是它们的高度系统不同。编译器为每一个动态方法指定一个独一无二的数字,用这个数字和动态方法的地址构造一个动态方法表(DMT)。不像VMT表,在DMT表中仅有它声明的动态方法,并且这个方法需要祖先的DMT表来访问它蓁的动态方法。正因为这样动态方法比虚拟方法用的内存要少,但执行起来罗慢,因为有可能要到祚对象的DMT中查找动态法。 4、OP通过覆盖使一方法在不同的派生类间表现出不同的行为。OP中能被覆盖的方法是在声明时被标识为virtual或dynamic的方法。为了覆盖一个方法,在派生类的声明中用override代替virtual或dynamic。用了override后,编译器就会用新的方法替换VMT中原先的方法,而原先的方法也还存在,而如果用override再次声明一个静态方法,则是真正的覆盖,是用新的方法完全替换在祖先类中的同明方法。 5、方法重载的意义:比如说,你要写一个求两数商的函数(当然只是个比喻),你希望这个函数可以处理所有的数值类型,但PASCAL的运算对类型实行严格检查,你不得不用不同的程序来运算不同类型的数值,这样你就必须为每一种类型写一个同样功能的函数,并使用不同的函数名,坏处我想你是知道的。而重载却可以解决这个问题,同样的函数名,编译器可以用不同的形参类型决定调用哪个函数。Top dynamic和virtual的不同之处 delphi动态虚拟覆盖重载重定义的区别 (www.ip8000.com www.sql8.net)

2010-11-24

delphi动态虚拟覆盖重载重定义的区别

DELPHI中方法的类型及其覆盖、重载 1、静态方法是方法的缺省类型,对它就像对通常的过程和函数那样调用,编译器知道这些方法的地址,所以调用一个静态方法时它能把运行信息静态地链接进可执行文件,所以,静态方法速度最快,但它们却不能被覆盖来支持多态性。 2、虚拟方法和静态方法的调用方式相同。由于虚拟方法能被覆盖,在代码中调用一个指定的虚拟方法时编译器并不知道它的地址,因此,编译器通过建立虚拟方法表(VMT)来查找在运行时的函数地址。所有的虚拟方法在运行时通过VMT来高度,一个对象的VMT表中除了自己定义的虚拟方法外,还有它的祚的所有的虚拟方法,因此虚拟方法比动态方法用的内存要多,但它执行得比较快。 3、动态方法跟虚拟方法基本相似,只是它们的高度系统不同。编译器为每一个动态方法指定一个独一无二的数字,用这个数字和动态方法的地址构造一个动态方法表(DMT)。不像VMT表,在DMT表中仅有它声明的动态方法,并且这个方法需要祖先的DMT表来访问它蓁的动态方法。正因为这样动态方法比虚拟方法用的内存要少,但执行起来罗慢,因为有可能要到祚对象的DMT中查找动态法。 4、OP通过覆盖使一方法在不同的派生类间表现出不同的行为。OP中能被覆盖的方法是在声明时被标识为virtual或dynamic的方法。为了覆盖一个方法,在派生类的声明中用override代替virtual或dynamic。用了override后,编译器就会用新的方法替换VMT中原先的方法,而原先的方法也还存在,而如果用override再次声明一个静态方法,则是真正的覆盖,是用新的方法完全替换在祖先类中的同明方法。 5、方法重载的意义:比如说,你要写一个求两数商的函数(当然只是个比喻),你希望这个函数可以处理所有的数值类型,但PASCAL的运算对类型实行严格检查,你不得不用不同的程序来运算不同类型的数值,这样你就必须为每一种类型写一个同样功能的函数,并使用不同的函数名,坏处我想你是知道的。而重载却可以解决这个问题,同样的函数名,编译器可以用不同的形参类型决定调用哪个函数。Top www.ip8000.com sql8.net

2010-11-24

高清缩略图代码,可删除原图不会出现在XXX.jpg正在使用中,水印代正在研究中

我在网上用了很多的相关代码或者缩略图水印类,但是都有一个问题就是删除不了原图 public static void myGetThumbnailImage(string SourceFile, string strSavePathFile, int ThumbWidth, int ThumbHeight, string BgColor) { System.Drawing.Image oImg = System.Drawing.Image.FromFile(SourceFile); //小图 int intwidth, intheight; if (oImg.Width > oImg.Height) { if (oImg.Width > ThumbWidth) { intwidth = ThumbWidth; intheight = (oImg.Height * ThumbWidth) / oImg.Width; } else { intwidth = oImg.Width; intheight = oImg.Height; } } else { if (oImg.Height > ThumbHeight) { intwidth = (oImg.Width * ThumbHeight) / oImg.Height; intheight = ThumbHeight; } else { intwidth = oImg.Width; intheight = oImg.Height; } } //构造一个指定宽高的Bitmap Bitmap bitmay = new Bitmap(intwidth, intheight); Graphics g = Graphics.FromImage(bitmay); Color myColor; if (BgColor == null) myColor = Color.FromName("white"); else myColor = Color.FromName(BgColor); //用指定的颜色填充Bitmap g.Clear(myColor); g.InterpolationMode = InterpolationMode.HighQualityBicubic; //开始画图 g.DrawImage(oImg, new Rectangle(0, 0, intwidth, intheight), new Rectangle(0, 0, oImg.Width, oImg.Height), GraphicsUnit.Pixel); bitmay.Save(strSavePathFile, System.Drawing.Imaging.ImageFormat.Jpeg); g.Dispose(); bitmay.Dispose(); oImg.Dispose(); //删除源图 try { File.Delete(SourceFile); } catch { } }

2009-09-29

软件开发文档|需求说明|设计说明|国简标准-软件

软件开发文档|需求说明|设计说明|国简标准-软件

2009-03-12

经典cookie购物车源码[GridView实现]

特别说明请注意: 根许多网友反应, using Maticsoft.Functions; 这些代码看不懂 其实Functions 这个dll是我定义常用的函数类,如果需要跟我联系索取http://sql8.net 下面有我的群号, 其中 ArtsShop.Model.Arts_Product _p = new ArtsShop.Model.Arts_Product(); ArtsShop.BLL.Arts_Product p = new ArtsShop.BLL.Arts_Product(); _p = p.GetModel(id); 这是我的商品信息的类,三层结构,这个在用时你们只能换成你们自己的,这些代码完全可以删除, 比如 MyDr[1] = _p.Title; 用来读取商品名的,你们可以改MyDr[1] = dr["productname"].ToString();就行了, AddToCart.aspx页面代码 无标题页 <asp:TextBox ID="TextBox1" runat="server" Text='' Width="44px"> <asp:Label ID="Label1" runat="server" Text=''> 保存 取消 编辑 继续购物 清空购物车 下订单 AddToCart.aspx.cs页面代码 using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using Maticsoft.Functions;public partial class AddToCart : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { int ProID; HttpCookie cookie; bool Tempbl = false; string Tempstr; if (!Page.IsPostBack) { if (!object.Equals(Request.QueryString["id"], null)) { ProID = int.Parse(Request.QueryString["id"]); //创购物车cookie yxy .//sql8.net if (object.Equals(Request.Cookies["ztbscart"], null)) cookie = new HttpCookie("ztbscart"); else cookie = Request.Cookies["ztbscart"]; //判断是否已存在于购物车内 yxy // sql8.net for (int i = 0; i < cookie.Values.Keys.Count; i++) { if (!object.Equals(cookie.Values.Keys[i], null)) { Tempstr = cookie.Values.AllKeys[i].ToString(); if (Tempstr.Trim() != "") { if (ProID == int.Parse(cookie.Values.AllKeys[i])) { Tempbl = true; break; } } } } //不未购买过则加入购物车 yxy //sql8.net if (!Tempbl) cookie.Values.Add(ProID.ToString(), "1"); else { } TimeSpan ts = new TimeSpan(0, 0, 10, 0); cookie.Expires = DateTime.Now + ts; Response.AppendCookie(cookie); } BindGrid(); } } //绑定数据 yxy //sql8.net private void BindGrid() { DataTable MyDt; DataRow MyDr; string str = ""; MyDt = new DataTable(); MyDt.Columns.Add(new DataColumn("id", str.GetType())); MyDt.Columns.Add(new DataColumn("Title", str.GetType())); MyDt.Columns.Add(new DataColumn("Num", str.GetType())); MyDt.Columns.Add(new DataColumn("Price", str.GetType())); MyDt.Columns.Add(new DataColumn("Discount", str.GetType())); MyDt.Columns.Add(new DataColumn("Vipprice", str.GetType())); MyDt.Columns.Add(new DataColumn("Totle", str.GetType())); if (!object.Equals(Request.Cookies["ztbscart"], null)) { HttpCookie cookie = Request.Cookies["ztbscart"]; double Totle; //Response.Write("|" + Request.Cookies["ztbscart"].Values.Keys[1].ToString() + "|"); //Response.End(); for (int i = 0; i < cookie.Values.Keys.Count; i++) { int id; MyDr = MyDt.NewRow(); if (cookie.Values.AllKeys[i] != "" && cookie.Values[i] != "") { id = int.Parse(cookie.Values.AllKeys[i].ToString()); ArtsShop.Model.Arts_Product _p = new ArtsShop.Model.Arts_Product(); ArtsShop.BLL.Arts_Product p = new ArtsShop.BLL.Arts_Product(); _p = p.GetModel(id); MyDr[0] = id; MyDr[1] = _p.Title; MyDr[2] = cookie.Values[i]; MyDr[3] = _p.Price; MyDr[4] = _p.Discount; MyDr[5] = _p.Vipprice1; Totle = double.Parse(MyDr[2].ToString()) * double.Parse(MyDr[5].ToString()); MyDr[6] = Totle; MyDt.Rows.Add(MyDr); } } GridView1.DataSource = MyDt.DefaultView; GridView1.DataBind(); } } protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { //编辑某行数量 yxy //sql8.net GridView1.EditIndex = e.NewEditIndex; BindGrid(); } protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { //取消更新 yxy //sql8.net GridView1.EditIndex = -1; BindGrid(); } protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { //更新数量 yxy //sql8.net string num; TextBox tempbx = new TextBox(); Label templb = new Label(); tempbx = (TextBox)(GridView1.Rows[e.RowIndex].Cells[6]).Controls[1]; num = tempbx.Text.ToString(); HttpCookie cookie = new HttpCookie("ztbscart"); for (int i = 0; i < GridView1.Rows.Count; i++) { string id; string tempnum; id = GridView1.Rows[i].Cells[1].Text.ToString(); if (e.RowIndex == i) tempnum = num; else { templb = (Label)(GridView1.Rows[i].Cells[6]).Controls[1]; tempnum = templb.Text.ToString(); } if (tempnum.Trim() == "") tempnum = "0"; //Response.Write("ID:"+id.ToString() + "Num:"+tempnum+":"+i+"");//测试用途 yxy//sql8.net cookie.Values.Add(id, tempnum); } //Response.End(); TimeSpan ts = new TimeSpan(0, 0, 10, 0); cookie.Expires = DateTime.Now + ts; Response.AppendCookie(cookie); GridView1.EditIndex = -1; Message.GoTo("AddToCart.aspx"); } protected void LinkButton4_Click(object sender, EventArgs e) { //继续购物 yxy //sql8.net Message.WebClose(); } protected void LinkButton3_Click(object sender, EventArgs e) { //清空购物车 yxy //sql8.net CheckBox tempcb = new CheckBox(); HttpCookie cookie = new HttpCookie("ztbscart"); Label templb = new Label(); for (int i = 0; i < GridView1.Rows.Count; i++) { tempcb = (CheckBox)(GridView1.Rows[i].Cells[0]).Controls[1]; if (!tempcb.Checked) { string id; string tempnum; id = GridView1.Rows[i].Cells[1].Text.ToString(); templb = (Label)(GridView1.Rows[i].Cells[6]).Controls[1]; tempnum = templb.Text.ToString(); if (tempnum.Trim() == "") tempnum = "0"; //Response.Write("ID:"+id.ToString() + "Num:"+tempnum+":"+i+"");//测试用途 yxy//sql8.net cookie.Values.Add(id, tempnum); } } TimeSpan ts = new TimeSpan(0, 0, 10, 0); cookie.Expires = DateTime.Now + ts; Response.AppendCookie(cookie); Message.GoTo("AddToCart.aspx"); } protected void CheckAll_CheckedChanged(object sender, EventArgs e) { //全选事件 yxy //sql8.net CheckBox tempcb = new CheckBox(); bool tempbl; tempcb = (CheckBox)(GridView1.HeaderRow.Cells[0]).Controls[1]; tempbl = tempcb.Checked; for (int i = 0; i < GridView1.Rows.Count; i++) { tempcb = (CheckBox)(GridView1.Rows[i].Cells[0]).Controls[1]; tempcb.Checked = tempbl; } } } _________________________________________________________________________ 如转载请注明原出处 www.sql8.net

2008-09-11

图书店源码asp数据sql

书库源码asp数据sql如果有问题请上www.sql8.net交流

2008-09-09

图书店系统.net2003 sql2000

很好用的,购物车不错,如果问题可到www.sql8.net交流

2008-09-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除