随笔 - 28  文章 - 12 评论 - 5 trackbacks - 2
<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

与我联系

常用链接

留言簿

随笔分类

随笔档案

新闻档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

select语句中只能使用sql函数对字段进行操作(链接sql server),
select 字段1 from 表1 where 字段1.IndexOf("云")=1;
这条语句不对的原因是indexof()函数不是sql函数,改成sql对应的函数就可以了。
left()是sql函数。
select 字段1 from 表1 where charindex('云',字段1)=1;

字符串函数对二进制数据、字符串和表达式执行不同的运算。此类函数作用于CHAR、VARCHAR、 BINARY、 和VARBINARY 数据类型以及可以隐式转换为CHAR 或VARCHAR的数据类型。可以在SELECT 语句的SELECT 和WHERE 子句以及表达式中使用字符串函数。
常用的字符串函数有:

一、字符转换函数
1、ASCII()
返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错。
2、CHAR()
将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII 码值,CHAR() 返回NULL 。
3、LOWER()和UPPER()
LOWER()将字符串全部转为小写;UPPER()将字符串全部转为大写。
4、STR()
把数值型数据转换为字符型数据。
STR (<float_expression>[,length[, <decimal>]])
length 指定返回的字符串的长度,decimal 指定返回的小数位数。如果没有指定长度,缺省的length 值为10, decimal 缺省值为0。
当length 或者decimal 为负值时,返回NULL;
当length 小于小数点左边(包括符号位)的位数时,返回length 个*;
先服从length ,再取decimal ;
当返回的字符串位数小于length ,左边补足空格。
二、去空格函数
1、LTRIM() 把字符串头部的空格去掉。

2、RTRIM() 把字符串尾部的空格去掉。

三、取子串函数
1、left()
LEFT (<character_expression>, <integer_expression>)
返回character_expression 左起 integer_expression 个字符。

2、RIGHT()
RIGHT (<character_expression>, <integer_expression>)
返回character_expression 右起 integer_expression 个字符。

3、SUBSTRING()
SUBSTRING (<expression>, <starting_ position>, length)
返回从字符串左边第starting_ position 个字符起length个字符的部分。

四、字符串比较函数
1、CHARINDEX()
返回字符串中某个指定的子串出现的开始位置。
CHARINDEX (<’substring_expression’>, <expression>)
其中substring _expression 是所要查找的字符表达式,expression 可为字符串也可为列名表达式。如果没有发现子串,则返回0 值。
此函数不能用于TEXT 和IMAGE 数据类型。
2、PATINDEX()
返回字符串中某个指定的子串出现的开始位置。
PATINDEX (<’%substring _expression%’>, <column_ name>)其中子串表达式前后必须有百分号“%”否则返回值为0。
与CHARINDEX 函数不同的是,PATINDEX函数的子串中可以使用通配符,且此函数可用于CHAR、 VARCHAR 和TEXT 数据类型。

五、字符串操作函数
1、QUOTENAME()
返回被特定字符括起来的字符串。
QUOTENAME (<’character_expression’>[, quote_ character]) 其中quote_ character 标明括字符串所用的字符,缺省值为“[]”。
2、REPLICATE()
返回一个重复character_expression 指定次数的字符串。
REPLICATE (character_expression integer_expression) 如果integer_expression 值为负值,则返回NULL 。

3、REVERSE()
将指定的字符串的字符排列顺序颠倒。
REVERSE (<character_expression>) 其中character_expression 可以是字符串、常数或一个列的值。

4、REPLACE()
返回被替换了指定子串的字符串。
REPLACE (<string_expression1>, <string_expression2>, <string_expression3>) 用string_expression3 替换在string_expression1 中的子串string_expression2。

4、SPACE()
返回一个有指定长度的空白字符串。
SPACE (<integer_expression>) 如果integer_expression 值为负值,则返回NULL 。

5、STUFF()
用另一子串替换字符串指定位置、长度的子串。
STUFF (<character_expression1>, <start_ position>, <length>,<character_expression2>)
如果起始位置为负或长度值为负,或者起始位置大于character_expression1 的长度,则返回NULL 值。
如果length 长度大于character_expression1 中 start_ position 以右的长度,则character_expression1 只保留首字符。
六、数据类型转换函数
1、CAST()
CAST (<expression> AS <data_ type>[ length ])

2、CONVERT()
CONVERT (<data_ type>[ length ], <expression> [, style])

1)data_type为SQL Server系统定义的数据类型,用户自定义的数据类型不能在此使用。
2)length用于指定数据的长度,缺省值为30。
3)把CHAR或VARCHAR类型转换为诸如INT或SAMLLINT这样的INTEGER类型、结果必须是带正号或负号的数值。
4)TEXT类型到CHAR或VARCHAR类型转换最多为8000个字符,即CHAR或VARCHAR数据类型是最大长度。
5)IMAGE类型存储的数据转换到BINARY或VARBINARY类型,最多为8000个字符。
6)把整数值转换为MONEY或SMALLMONEY类型,按定义的国家的货币单位来处理,如人民币、美元、英镑等。
7)BIT类型的转换把非零值转换为1,并仍以BIT类型存储。
8)试图转换到不同长度的数据类型,会截短转换值并在转换值后显示“+”,以标识发生了这种截断。
9)用CONVERT()函数的style 选项能以不同的格式显示日期和时间。style 是将DATATIME 和SMALLDATETIME 数据转换为字符串时所选用的由SQL Server 系统提供的转换样式编号,不同的样式编号有不同的输出格式。
七、日期函数
1、day(date_expression)
返回date_expression中的日期值

2、month(date_expression)
返回date_expression中的月份值

3、year(date_expression)
返回date_expression中的年份值

4、DATEADD()
DATEADD (<datepart>, <number>, <date>)
返回指定日期date 加上指定的额外日期间隔number 产生的新日期。
5、DATEDIFF()
DATEDIFF (<datepart>, <date1>, <date2>)
返回两个指定日期在datepart 方面的不同之处,即date2 超过date1的差距值,其结果值是一个带有正负号的整数值。

6、DATENAME()
DATENAME (<datepart>, <date>)
以字符串的形式返回日期的指定部分此部分。由datepart 来指定。

7、DATEPART()
DATEPART (<datepart>, <date>)
以整数值的形式返回日期的指定部分。此部分由datepart 来指定。
DATEPART (dd, date) 等同于DAY (date)
DATEPART (mm, date) 等同于MONTH (date)
DATEPART (yy, date) 等同于YEAR (date)

8、GETDATE()
以DATETIME 的缺省格式返回系统当前的日期和时间。


posted @ 2008-03-07 22:21 wdx2008 阅读(149) | 评论 (0)编辑

"^\d+$"  //非负整数(正整数 + 0) 
"^[0-9]*[1-9][0-9]*$"  //正整数 
"^((-\d+)|(0+))$"  //非正整数(负整数 + 0) 
"^-[0-9]*[1-9][0-9]*$"  //负整数 
"^-?\d+$"    //整数 
"^\d+(\.\d+)?$"  //非负浮点数(正浮点数 + 0) 
"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"  //正浮点数 
"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"  //非正浮点数(负浮点数 + 0) 
"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"  //负浮点
数 
"^(-?\d+)(\.\d+)?$"  //浮点数 
"^[A-Za-z]+$"  //由26个英文字母组成的字符串 
"^[A-Z]+$"  //由26个英文字母的大写组成的字符串 
"^[a-z]+$"  //由26个英文字母的小写组成的字符串 
"^[A-Za-z0-9]+$"  //由数字和26个英文字母组成的字符串 
"^\w+$"  //由数字、26个英文字母或者下划线组成的字符串 
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"    //email地址 
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"  //url 
/^13\d{9}$/gi手机号正则表达式
public static bool IsValidMobileNo(string MobileNo)
  {
   const string regPattern = @"^(130|131|132|133|134|135|136|137|138|139)\d{8}$";
   return Regex.IsMatch(MobileNo, regPattern);
  }
正则表达式--验证手机号码:13[0-9]{9}
实现手机号前带86或是+86的情况:^((\+86)|(86))?(13)\d{9}$
电话号码与手机号码同时验证:(^(\d{3,4}-)?\d{7,8})$|(13[0-9]{9}) 
提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F)  *=  *('|")?(\w|\\|\/|\.)+('|"|  *|>)?  
提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*  
提取信息中的图片链接:(s|S)(r|R)(c|C)  *=  *('|")?(\w|\\|\/|\.)+('|"|  *|>)?
提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+)    
提取信息中的中国手机号码:(86)*0*13\d{9}    
提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}    
提取信息中的中国电话号码(包括移动和固定电话):(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}    
提取信息中的中国邮政编码:[1-9]{1}(\d+){5}    
提取信息中的中国身份证号码:\d{18}|\d{15}    
提取信息中的整数:\d+    
提取信息中的浮点数(即小数):(-?\d*)\.?\d+    
提取信息中的任何数字  :(-?\d*)(\.\d+)?  
提取信息中的中文字符串:[\u4e00-\u9fa5]*    
提取信息中的双字节字符串  (汉字):[^\x00-\xff]*

本文来自: 天空618(www.sky618.com) 详细出处参考:http://www.sky618.com/html/200703/6/8858.htm

posted @ 2008-02-26 01:24 wdx2008 阅读(86) | 评论 (0)编辑
一、认识Web.config文件
Web.config 文件是一个XML文本文件,它用来储存 ASP.NET Web 应用程序的配置信息(如最常用的设置ASP.NET Web 应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。当你通过.NET新建一个Web应用程序后,默认情况下会在根目录自动创建一个默认的Web.config文件,包括默认的配置设置,所有的子目录都继承它的配置设置。如果你想修改子目录的配置设置,你可以在该子目录下新建一个Web.config文件。它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。
(一).Web.Config是以XML文件规范存储,配置文件分为以下格式
1.配置节处理程序声明
特点:位于配置文件的顶部,包含在<configSections>标志中。
2.特定应用程序配置
特点: 位于<appSetting>中。可以定义应用程序的全局常量设置等信息.
3.配置节设置
特点: 位于<system.Web>节中,控制Asp.net运行时的行为.
4.配置节组
特点: 用<sectionGroup>标记,可以自定义分组,可以放到<configSections>内部或其它<sectionGroup>标记的内部.
(二).配置节的每一节
1.<configuration>节根元素,其它节都是在它的内部.
2.<appSetting>节此节用于定义应用程序设置项。对一些不确定设置,还可以让用户根据自己实际情况自己设置
用法:
I.<appSettings>
<add key="Conntction" value="server=192.168.85.66;userid=sa;password=;database=Info;"/>
<appSettings>
定义了一个连接字符串常量,并且在实际应用时可以修改连接字符串,不用修改程式代码.
II.<appSettings>
<add key="ErrPage" value="Error.aspx"/><appSettings> 定义了一个错误重定向页面.
3.<compilation>节
格式:
<compilation
defaultLanguage="c#"
debug="true"
/>
I.default language: 定义后台代码语言,可以选择C#和VB.net两种语言.
IIdebug : 为true时,启动aspx调试;为false不启动aspx调试,因而可以提高应用程序运行时的性能。一般程序员在开发时设置为true,交给客户时设置为false.
4.<customErrors>节
格式:
<customErrors
mode="RemoteOnly"
defaultRedirect="error.aspx"
<error statusCode="440" redirect="err440page.aspx"/>
<error statusCode="500" redirect="err500Page.aspx"/>
/>
I.mode : 具有On,Off,RemoteOnly 3种状态。On表示始终显示自定义的信息; Off表示始终显示详细的asp.net错误信息; RemoteOnly表示只对不在本地Web服务器上运行的用户显示自定义信息.
II.defaultRedirect: 用于出现错误时重定向的URL地址. 是可选的
III.statusCode: 指明错误状态码,表明一种特定的出错状态.
IV. redirect:错误重定向的URL.
5.<globalization>节
格式:
<globalization
requestEncoding="utf-8"
resp
fileEncoding="utf-8"
/>
I.requestEncoding: 它用来检查每一个发来请求的编码.
II.responseEncoding: 用于检查发回的响应内容编码.
III.fileEncoding: 用于检查aspx,asax等文件解析的默认编码.
6.<sessionState>节
格式:
<sessionState
mode="InProc"
stateC
sqlC
cookieless="false"
timeout="20"
/>
I.mode: 分为off,Inproc,StateServer,SqlServer几种状态
mode = InProc 存储在进程中特点:具有最佳的性能,速度最快,但不能跨多台服务器存储共享.mode = "StateServer" 存储在状态服务器中特点:   当需要跨服务器维护用户会话信息时,使用此方法。但是信息存储在状态服务器上,一旦状态服务器出现故障,信息将丢失. mode="SqlServer" 存储在Sql Server中特点:工作负载会变大,但信息不会丢失.
II. stateConnectionString :指定Asp.net应用程序存储远程会话状态的服务器名,默认为本机
III.sqlConnectionString:当用会话状态数据库时,在这里设置连接字符串
IV. Cookieless:设置为true时,表示不使用cookie会话状态来标识客户;否则,相反.
V. TimeOut:用来定义会话状态存储的时间,超过期限,将自动终止会话.
7.<authentication>节
格式:
<authentication mode="Forms">
<forms name=".ASPXUSERDEMO" loginUrl="Login.aspx" protection="All" timeout="30"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
I.Windows: 使用IIS验证方式
II.Forms: 使用基于窗体的验证方式
III.Passport: 采用Passport cookie验证模式
IV.None: 不采用任何验证方式
里面内嵌Forms节点的属性涵义:
I.Name: 指定完成身份验证的Http cookie的名称.
II.LoginUrl: 如果未通过验证或超时后重定向的页面URL,一般为登录页面,让用户重新登录
III.Protection: 指定 cookie数据的保护方式.
可设置为: All None Encryption Validation四种保护方式
a. All表示加密数据,并进行有效性验证两种方式
b. None表示不保护Cookie.
c. Encryption表示对Cookie内容进行加密
d. validation表示对Cookie内容进行有效性验证
IV. TimeOut: 指定Cookie的失效时间. 超时后要重新登录.
在运行时对Web.config文件的修改不需要重启服务就可以生效(注:<processModel> 节例外)。当然Web.config文件是可以扩展的。你可以自定义新配置参数并编写配置节处理程序以对它们进行处理。
web.config配置文件(默认的配置设置)以下所有的代码都应该位于
<configuration>
<system.web>

</system.web>
</configuration>
之间,出于学习的目的下面的示例都省略了这段XML标记。
1<authentication>
作用:配置 ASP.NET 身份验证支持(为Windows、Forms、PassPort、None四种)。该元素只能在计算机、站点或应用程序级别声明。< authentication> 元素必需与<authorization> 节配合使用。
示例:
以下示例为基于窗体(Forms)的身份验证配置站点,当没有登陆的用户访问需要身份验证的网页,网页自动跳转到登陆网页。
<authentication mode="Forms" >
<forms loginUrl="logon.aspx" name=".FormsAuthCookie"/>
</authentication>
其中元素loginUrl表示登陆网页的名称,name表示Cookie名称。
2<authorization>
作用:控制对 URL 资源的客户端访问(如允许匿名用户访问)。此元素可以在任何级别(计算机、站点、应用程序、子目录或页)上声明。必需与<authentication> 节配合使用。
示例:以下示例禁止匿名用户的访问
<authorization>
     <deny users="?"/>
</authorization>
注:你可以使用user.identity.name来获取已经过验证的当前的用户名;可以使用web.Security.FormsAuthentication.RedirectFromLoginPage方法将已验证的用户重定向到用户刚才请求的页面.具体的
3<compilation>
作用:配置 ASP.NET 使用的所有编译设置。默认的debug属性为“True”.在程序编译完成交付使用之后应将其设为False(Web.config文件中有详细说明,此处省略示例)
4<customErrors>
作用:为 ASP.NET 应用程序提供有关自定义错误信息的信息。它不适用于 XML Web services 中发生的错误。
示例:当发生错误时,将网页跳转到自定义的错误页面。
<customErrors defaultRedirect="ErrorPage.aspx" mode="RemoteOnly">
</customErrors>
其中元素defaultRedirect表示自定义的错误网页的名称。mode元素表示:对不在本地 Web 服务器上运行的用户显示自定义(友好的)信息。
5<httpRuntime>
作用:配置 ASP.NET HTTP 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。
示例:控制用户上传文件最大为4M,最长时间为60秒,最多请求数为100
<httpRuntime maxRequestLength="4096" executi appRequestQueueLimit="100"/>
6 <pages>
作用:标识特定于页的配置设置(如是否启用会话状态、视图状态,是否检测用户的输入等)。<pages>可以在计算机、站点、应用程序和子目录级别声明。
示例:不检测用户在浏览器输入的内容中是否存在潜在的危险数据(注:该项默认是检测,如果你使用了不检测,一要对用户的输入进行编码或验证),在从客户端回发页时将检查加密的视图状态,以验证视图状态是否已在客户端被篡改。(注:该项默认是不验证)
<pages buffer="true" enableViewStateMac="true" validateRequest="false"/>
7<sessionState>
作用:为当前应用程序配置会话状态设置(如设置是否启用会话状态,会话状态保存位置)。
示例:
<sessionState mode="InProc" cookieless="true" timeout="20"/>
</sessionState>
注:
mode="InProc"表示:在本地储存会话状态(你也可以选择储存在远程服务器或SAL服务器中或不启用会话状态)
cookieless="true"表示:如果用户浏览器不支持Cookie时启用会话状态(默认为False)
timeout="20"表示:会话可以处于空闲状态的分钟数
8<trace>
作用:配置 ASP.NET 跟踪服务,主要用来程序测试判断哪里出错。
示例:以下为Web.config中的默认配置:
<trace enabled="false" requestLimit="10" pageOutput="false" traceMode="SortByTime" local />
注:
enabled="false"表示不启用跟踪;
requestLimit="10"表示指定在服务器上存储的跟踪请求的数目
pageOutput="false"表示只能通过跟踪实用工具访问跟踪输出;
traceMode="SortByTime"表示以处理跟踪的顺序来显示跟踪信息
local 表示跟踪查看器 (trace.axd) 只用于宿主 Web 服务器
自定义Web.config文件配置
自定义Web.config文件配置节过程分为两步。
1.在配置文件顶部 <configSections> 和 </configSections>标记之间声明配置节的名称和处理该节中配置数据的 .NET Framework 类的名称。
2.是在 <configSections> 区域之后为声明的节做实际的配置设置。
示例:创建一个节存储数据库连接字符串
<configuration>
  <configSections>
  <section name="appSettings" type="System.Configuration.NameValueFileSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</configSections>
  <appSettings>
   <add key="scon" value="server=a;database=northwind;uid=sa;pwd=123"/>
  </appSettings>
  <system.web>
   ......
  </system.web>
</configuration>
访问Web.config文件你可以通过使用ConfigurationSettings.AppSettings 静态字符串集合来访问 Web.config 文件示例:获取上面例子中建立的连接字符串。例如:
protected static string Isdebug = ConfigurationSettings.AppSettings["debug"]
二、web.config中的session配置详解
打开某个应用程序的配置文件Web.config后,我们会发现以下这段:
< sessionState
  mode="InProc"
  stateC
  sqlC
  cookieless="false"
  timeout="20"
/>
  这一段就是配置应用程序是如何存储Session信息的了。我们以下的各种操作主要是针对这一段配置展开。让我们先看看这一段配置中所包含的内容的意思。sessionState节点的语法是这样的:
< sessionState mode="Off|InProc|StateServer|SQLServer"
               cookieless="true|false"
               timeout="number of minutes"
               stateC
               sqlC
               stateNetworkTimeout="number of seconds"
/>
必须有的属性是:属性选项描述
mode 设置将Session信息存储到哪里
?           Off 设置为不使用Session功能,
?           InProc 设置为将Session存储在进程内,就是ASP中的存储方式,这是默认值,
?           StateServer 设置为将Session存储在独立的状态服务中,
?           SQLServer 设置将Session存储在SQL Server中。
可选的属性是:属性选项描述
?           cookieless 设置客户端的Session信息存储到哪里,
?           ture 使用Cookieless模式,
?           false 使用Cookie模式,这是默认值,
?           timeout 设置经过多少分钟后服务器自动放弃Session信息,默认为20分钟。
stateConnectionString 设置将Session信息存储在状态服务中时使用的服务器名称和端口号,例如:"tcpip=127.0.0.1:42424”。当mode的值是StateServer是,这个属性是必需的。
sqlConnectionString 设置与SQL Server连接时的连接字符串。例如"data source= localhost;Integrated Security=SSPI;Initial Catalog=northwind"。当mode的值是 SQLServer时,这个属性是必需的。
stateNetworkTimeout 设置当使用StateServer模式存储Session状态时,经过多少秒空闲后,断开Web服务器与存储状态信息的服务器的TCP/IP连接的。默认值是10秒钟。
ASP.NET中客户端Session状态的存储
  在我们上面的Session模型简介中,大家可以发现Session状态应该存储在两个地方,分别是客户端和服务器端。客户端只负责保存相应网站的SessionID,而其他的Session信息则保存在服务器端。在ASP中,客户端的SessionID实际是以Cookie的形式存储的。如果用户在浏览器的设置中选择了禁用Cookie,那末他也就无法享受Session的便利之处了,甚至造成不能访问某些网站。为了解决以上问题,在 ASP.NET中客户端的Session信息存储方式分为:Cookie和Cookieless两种。
  ASP.NET中,默认状态下,在客户端还是使用Cookie存储Session信息的。如果我们想在客户端使用Cookieless的方式存储Session信息的方法如下:
  找到当前Web应用程序的根目录,打开Web.Config文件,找到如下段落:
< sessionState
  mode="InProc"
  stateC
  sqlC
  cookieless="false"
  timeout="20"
/>
  这段话中的cookieless="false"改为:cookieless="true",这样,客户端的Session信息就不再使用 Cookie存储了,而是将其通过URL存储。关闭当前的IE,打开一个新IE,重新访问刚才的Web应用程序,就会看到类似下面的样子:
其中,http://localhost/MyTestApplication/(ulqsek45heu3ic2a5zgdl245) /default.aspx中黑体标出的就是客户端的Session ID。注意,这段信息是由IIS自动加上的,不会影响以前正常的连接。
ASP.NET中服务器端Session状态的存储准备工作:
  为了您能更好的体验到实验现象,您可以建立一个叫做SessionState.aspx的页面,然后把以下这些代码添加到< body>< /body>中。
< scriptrunat="server">
Sub Session_Add(sender As Object, e As EventArgs)
  Session("MySession") = text1.Value
  span1.InnerHtml = "Session data updated! < P>Your session contains: < font color=red>" & Session("MySession"). ToString() & "< /font>"
End Sub
Sub CheckSession(sender As Object, eAs EventArgs)
  If (Session("MySession")Is Nothing) Then
    span1.InnerHtml = "NOTHING, SESSION DATA LOST!"
  Else
    span1.InnerHtml = "Your session contains: < font color= red>" & Session("MySession").ToString() & "<     /font>"
End If
End Sub
< /script>
< formrunat="server"id="Form2">
  < inputid="text1"type="text"runat="server"name="text1">
  < inputtype="submit"runat="server"
      value="Add to Session State " id="Submit1"name="Submit1">
  < inputtype="submit"runat="server"
      value=" View Session State " id="Submit2"name="Submit2">
< /form>
< hrsize="1">
< f>< spanid="span1"runat="server" />< /font>
  这个SessionState.aspx的页面可以用来测试在当前的服务器上是否丢失了Session信息。
将服务器Session信息存储在进程中
  让我们来回到Web.config文件的刚才那段段落中:
< sessionState
  mode="InProc"
  stateC
  sqlC
  cookieless="false"
  timeout="20"
/>
  mode的值是InProc时,说明服务器正在使用这种模式。
  这种方式和以前ASP中的模式一样,就是服务器将Session信息存储在IIS进程中。当IIS关闭、重起后,这些信息都会丢失。但是这种模式也有自己最大好处,就是性能最高。应为所有的Session信息都存储在了IIS的进程中,所以IIS能够很快的访问到这些信息,这种模式的性能比进程外存储Session信息或是在SQL Server中存储Session信息都要快上很多。这种模式也是ASP.NET的默认方式。
  好了,现在让我们做个试验。打开刚才的SessionState.aspx页面,随便输入一些字符,使其存储在Session中。然后,让我们让IIS重起。注意,并不是使当前的站点停止再开始,而是在IIS中本机的机器名的节点上点击鼠标右键,选择重新启动IIS。(想当初使用NT4时,重新启动IIS必须要重新启动计算机才行,微软真是@#$%^&)返回到SessionState.aspx页面中,检查刚才的Session信息,发现信息已经丢失了。
将服务器Session信息存储在进程外
  首先,让我们来打开管理工具->服务,找到名为:ASP.NET State Service的服务,启动它。实际上,这个服务就是启动一个要保存Session信息的进程。启动这个服务后,你可以从Windows任务管理器->进程中看到一个名为 aspnet_state.exe的进程,这个就是我们保存Session信息的进程。
  然后,回到Web.config文件中上述的段落中,将mode的值改为StateServer。保存文件后的重新打开一个IE,打开 SessionState.aspx页面,保存一些信息到Session中。这时,让我们重起IIS,再回到SessionState.aspx页面中查看刚才的Session信息,发现没有丢失。
  实际上,这种将Session信息存储在进程外的方式不光指可以将信息存储在本机的进程外,还可以将Session信息存储在其他的服务器的进程中。这时,不光需要将mode的值改为StateServer,还需要在stateConnectionString中配置相应的参数。例如你的计算你是192.168.0.1,你想把Session存储在IP为192.168.0.2的计算机的进程中,就需要设置成这样: stateC。当然,不要忘记在192.168.0.2的计算机中装上.NET Framework,并且启动ASP.NET State Services服务。
将服务器Session信息存储在SQL Server中
  首先,还是让我们来做一些准备工作。启动SQL Server和SQL Server代理服务。在SQL Server中执行一个叫做 InstallSqlState.sql的脚本文件。这个脚本文件将在SQL Server中创建一个用来专门存储Session信息的数据库,及一个维护Session信息数据库的SQL Server代理作业。我们可以在以下路径中找到那个文件:
[system drive]\winnt\Microsoft.NET\Framework\[version]\
  然后打开查询分析器,连接到SQL Server服务器,打开刚才的那个文件并且执行。稍等片刻,数据库及作业就建立好了。这时,你可以打开企业管理器,看到新增了一个叫ASPState的数据库。但是这个数据库中只是些存储过程,没有用户表。实际上Session信息是存储在了tempdb 数据库的ASPStateTempSessions表中的,另外一个ASPStateTempApplications表存储了ASP中 Application对象信息。这两个表也是刚才的那个脚本建立的。另外查看管理->SQL Server代理->作业,发现也多了一个叫做ASPState_Job_DeleteExpiredSessions的作业,这个作业实际上就是每分钟去ASPStateTempSessions 表中删除过期的Session信息的。
  接着,我们返回到Web.config文件,修改mode的值改为SQLServer。注意,还要同时修改sqlConnectionString的值,格式为:
sqlC
  其中data source是指SQL Server服务器的IP地址,如果SQL Server与IIS是一台机子,写127.0.0.1 就行了。Integrated Security=SSPI的意思是使用Windows集成身份验证,这样,访问数据库将以ASP.NET的身份进行,通过如此配置,能够获得比使用userid=sa;password=口令的SQL Server验证方式更好的安全性。当然,如果SQL Server运行于另一台计算机上,你可能会需要通过Active Directory域的方式来维护两边验证的一致性。
  同样,让我们做个试验。向SessionState.aspx中添加Session信息,这时发现Session信息已经存在 SQL Server中了,即使你重起计算机,刚才的Session信息也不会丢失。现在,你已经完全看见了Session信息到底是什么样子的了,而且又是存储在SQL Server中的,能干什么就看你的发挥了。

总结
三、Asp.net 关于form认证的一般设置
asp.net 关于form认证的一般设置:
1: 在web.config中,加入form认证;
     <authentication mode="Forms">
               <forms name="auth" loginUrl="index.aspx" timeout="30"></forms>
</authentication>
<authorization>
           <deny users="?" />
</authorization>
2: 如果有注册页面时还应该允许匿名用户调用注册页面进行注册;
以下代码应该在<configuration><system.web>之间,而不应该包含到<system.web>..</system.web>之间;
----------------表示允许匿名用户对 userReg.aspx页面进行访问.
<location path="userReg.aspx">
<system.web>
       <authorization>
           <allow users="?" />
       </authorization>
</system.web>
</location>
3 在登录成功后要创建身份验证票, 表明已经通过认证的合法用户;
if(登陆成功)
System.Web.Security.FormsAuthentication.SetAuthCookie(用户名称, false);
  四、访问Web.config文件
  你可以通过使用ConfigurationSettings.AppSettings 静态字符串集合来访问 Web.config 文件示例:获取上面例子中建立的连接字符串。例如:
protected static string Isdebug = ConfigurationSettings.AppSettings["scon"]

posted @ 2008-02-10 23:10 wdx2008 阅读(105) | 评论 (0)编辑
字符
varchar  
可变字符  和存储的字符字节相等 列:abc123占用6个字节(表现为占用磁盘大小,下同)
nvarchar 可变字符 是实际存储字节的两倍 例:abc123占用12个字节 该字符使用Unicode编码支持多国语言
char       固定字符  实际表现例:指定列的长度为10 将abc123填充进去后面将出现4个空格。
整数  
  bigint    占用8个字节
  从  -2^63   (-9223372036854775808)   到   2^63-1   (9223372036854775807)   的整型数据(所有数字)。 
  int   
  从   -2^31   (-2,147,483,648)   到   2^31   -   1   (2,147,483,647)   的整型数据(所有数字)。   
  smallint   占用4个字节
  从   -2^15   (-32,768)   到   2^15   -   1   (32,767)   的整数数据。   
  tinyint   占用一个字节
  从   0   到   255   的整数数据。  

总结:
1.如果网站只是中文,不涉及多国语言的建议使用varchar,使用nvarchar将浪费空间,影响效率。
2.字符长度相对固定的要使用char字段,比如USER_IP。char是定长的,   移动到下一条记录,   只需要做固定长度的指针偏移即可.  varchar则必须根据当前记录的长度算出下一个数据指针的偏移. 
3.字符为数字的最好使用数字型数据。因为其占用字节更小且排序亦占优势。如手机号码使用Varchar需11位 使用bigint则占用8位。

几个问题:
1. char(n)一定比varchar(n)速度快么?  
  不一定  
  计算varchar的偏移是会花去一些cpu时间,但性能瓶颈不在此,在io.  
  db的io单位是数据页(8192字节)(一页存有多个数据行,数据行不能跨页。当然image,text等例外).  
  因此一页中行越多,性能越好。
2.使用的数字可能很小,但如果都定义成INT对效率有影响吗?
 是的
 这个是当然的,首先表现为int和tinyint占用的字节不同,也可理解成占用的磁盘的大小不同,较小的字节可以省去不必要的 内存消耗和相关指针转移。
3.varchar/char不支持多国语言,为什么英文和中文都能正常显示?
  这是因为服务器的操作系统和所安装的MSSQL都是中文的。
  参考:http://topic.csdn.net/t/20060324/18/4638303.html
4.其它还有什么方法提高数据库查询效率
合理使用索引    
  索引是数据库中重要的数据结构,它的根本目的就是为了提高查询效率。现在大多数的数据库产品都采用IBM最先提出的ISAM索引结构。索引的使用要恰到好处,其使用原则如下:    
  ●在经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。    
  ●在频繁进行排序或分组(即进行group   by或order   by操作)的列上建立索引。    
  ●在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。  
  ●如果待排序的列有多个,可以在这些列上建立复合索引(compound   index)。    
  ●使用系统工具。如Informix数据库有一个tbcheck工具,可以在可疑的索引上进行检查。在一些数据库服务器上,索引可能失效或者因为频繁操作而使得读取效率降低,如果一个使用索引的查询不明不白地慢下来,可以试着用tbcheck工具检查索引的完整性,必要时进行修复。另外,当数据库表更新大量数据后,删除并重建索引可以提高查询速度。  
不同编码字节长度测试代码:
System.Text.Encoding.Unicode.GetByteCount(StrTest);
System.Text.Encoding.UTF8.GetByteCount(StrTest);
System.Text.Encoding.GetEncoding("GB2312").GetByteCount(StrTest);
posted @ 2008-02-03 02:19 wdx2008 阅读(48) | 评论 (0)编辑

为你的mail server增加SPF记录

chifeng的大作;p)
----------------------
什么是SPF
就是Sender Policy Framework。SPF可以防止别人伪造你来发邮件,是一个反伪造性邮件的解决方案。当你定义了你的domain name的SPF记录之后,接收邮件方会根据你的SPF记录来确定连接过来的IP地址是否被包含在SPF记录里面,如果在,则认为是一封正确的邮件,否则则认为是一封伪造的邮件。关于更详细的信息请参考RFC4408(http://www.ietf.org/rfc/rfc4408.txt

如何增加SPF记录
非常简单,在DNS里面添加TXT记录即可。登陆http://www.openspf.org/wizard.html 在里面输入你的域名,点击Begin,然后会自动得到你域名的一些相关信息。
a 你域名的A记录,一般选择yes,因为他有可能发出邮件。
mx 一般也是yes,MX服务器会有退信等。
ptr 选择no,官方建议的。

a: 有没有其他的二级域名?比如:bbs.extmail.org和www不在一台server上,则填入bbs.extmail.org。否则清空。
mx: 一般不会再有其他的mx记录了。
ip4: 你还有没有其他的ip发信?可能你的smtp服务器是独立出来的,那么就填入你的IP地址或者网段。
include: 如果有可能通过一个isp来发信,这个有自己的SPF记录,则填入这个isp的域名,比如:sina.com
~all: 意思是除了上面的,其他的都不认可。当然是yes了。

好了,点击Continue…..
自动生成了一条SPF记录,比如extmail.org的是
v=spf1 a mx ~all
并且在下面告诉你如何在你的bind里面添加一条
extmail.org. IN TXT “v=spf1 a mx ~all”

加入你的bind,然后ndc reload即可。
检查一下:
dig -t txt extmail.org
posted @ 2008-01-23 15:01 wdx2008 阅读(27) | 评论 (0)编辑
1 这个世界不是因为你能做什么,而是你该做什么。

  2 创意是企业运营中一个很重要的一环,但它只是一环,不是所有,所以要把每项工作落实到实处。

  3 建立自我、追求忘我。

  4 做一份工作,做一份喜欢的工作就是很好的创业。

  5 不是你的公司在哪里,有时候你的心在哪里,你的眼光在哪里更为重要。

  6 不想当将军的士兵不是好士兵,但是一个当不好士兵的将军一定不是好将军。

  7 一个创业者最重要的,也是你最大的财富,就是你的诚信。

  8 小公司的战略就是两个词:活下来,挣钱。

  9 五年以后还想创业,你再创业。

  10 生存下来的第一个想法是做好,而不是做大。

  11 创业者书读得不多没关系,就怕不在社会上读书。

  12 在今天的商场上已经没有秘密了,秘密不是你的核心竞争力。

  13 很多人失败的原因不是钱太少,而是钱太多。

  14 概念到今天这个时代已经不能卖钱了。

  15 创业者光有激情和创新是不够的,它需要很好的体系、制度、团队以及良好的盈利模式。

  16 你的项目感觉是一个生意,不是一个独特的企业。

  17 赚钱模式越多越说明你没有模式。

  18 最优秀的模式往往是最简单的东西。

  19 建一个公司的时候要考虑有好的价值才卖。如果一开始想到卖,你的路可能就走偏掉。

  20 人要有专注的东西,人一辈子走下去挑战会更多,你天天换,我就怕了你。

  21 要找风险投资的时候,必须跟风险投资共担风险,你拿到的可能性会更大。

  22 记住,关系特别不可靠,做生意不能凭关系,做生意也不能凭小聪明。

  23 不要贪多,做精做透很重要,碰到一个强大的对手或者榜样的时候,你应该做的不是去挑战它,而是去弥补它。

  24 这世界上没有优秀的理念,只有脚踏实地的结果。

  25 一个好的东西往往是说不清楚的,说得清楚的往往不是好东西。

  26 如果你看了很多书,千万别告诉别人,告诉别人别人就会不断考你。

  27 一个项目,一个想法如果不够独特的话,很难吸引别人。

  28 做战略最忌讳的是面面俱到,一定要记住重点突破,所有的资源在一点突破,才有可能赢。

  29 小企业有大的胸怀,大企业要讲细节的东西。

  30 所有的创业者应该多花点时间,去学习别人是怎么失败的。

  31 关注对手是战略中很重要的一部分,但这并不意味着你会赢。

  32 战略不能落实到结果和目标上面,都是空话。

  33 很多东西是很难考量的,理念很难考量,但结果是可考量的。

  34 绝大部分创业者从微观推向宏观,通过发现一部分人的需求,然后向一群人推起来。

  35 80年代的人不要跟70年代,跟60年代的人竞争,而是要跟未来,跟90年代的人竞争,这样你才有赢的可能性。

  36 商业计划绝对不是一个销售计划,里面有无数细节,无数人才的运营。

  37 蒙牛不是策划出来的,而是踏踏实实的产品、服务和体系做出来的。

  38 战略不等于结果,战略制定了以后,结果还很遥远,还有很长的路要走。

  39 战略有很多意义,小公司的战略简单一点,就是活着,活着最重要。

  40 必须先去了解市场和客户的需求,然后再去找相关的技术解决方案,这样成功的可能性才会更大。

  41 最核心的问题是根据市场去制定你的产品,关键是要倾听客户的声音。  

  42 费是世界上最昂贵的东西。所以尽量不要免费。等你有了钱以后再考虑免费。

  43 “营销”这两个字强调既要追求结果,也要注重过程,既要“销”,更要“营”。

  44 要少开店、开好店,店不在于多,而在于精。

  45 男人的胸怀是委屈撑大的,多一点委屈,少一些脾气你会更快乐。

  46 有价值观,没有业务称为小白兔,一个公司小白兔多了以后,那就是一种灾难。

  47 诚信绝对不是一种销售,更不是一种高深空洞的理念,它是实实在在的言出必行、点点滴滴的细节。

  48 改变文化很难很难,但也不是不可能,我创建了蓝田玉pdf小说网,希望能够改变人们阅读小说的习惯。

  49 一个一流的创意,三流的执行,我宁可喜欢一个一流的执行,三流的创意。

  50 我觉得我们应该为结果付报酬,为过程鼓掌。

  51 其实很多人的问题是因为他们回答的全是对的。

  52 品质不仅仅是团队,它还是文化,是制度,是一整套东西。

  53 公关是个副产品,由于你解决了以后会逐渐传出去,这才是最好的公关。

  54 文化贯彻是最关键的。

  55 天不怕,地不怕,就怕CFO当CEO。

  56 短暂的激情是不值钱的,只有持久的激情才是赚钱的。

  57 聪明是智慧者的天敌,傻瓜用嘴讲话,聪明的人用脑袋讲话,智慧的人用心讲话。

  58 做企业不是做侠客,可是我还是经常免费赠送了宝宝爱儿歌的注册码。

  59 永远要把对手想得非常强大,哪怕非常弱小,你也要把他想得非常强大。

  60 慈善必须以商业的计划执行,以商业的形式执行,慈善才能走得久走得长。

  61 我自己不愿意聘用一个经常在竞争者之间跳跃的人。

  62 多花点时间在你的其他员工身上。

  63 什么是团队呢?团队就是不要让另外一个人失败,不要让团队任何一个人失败。

  64 把你太太当合作伙伴,不要把她当太太看。

  65 以后是想得可以很大,东西得一点点干,包括你请来MBA,请了一大堆人帮你做,你现在一个人在干。当CEO尽量少用我,有我们可能更好一点。

  66 有时候学历很高不一定把自己沉得下来做事情。

  67 创业时期千万不要找明星团队,千万不要找已经成功过的人。创业要找最适合的人,不要找最好的人。

  68 最大的挑战和突破在于用人,而用人最大的突破在于信任人。

  69 在公司内部找到能够超过你自己的人,这就是你发现人才的办法。

  70 什么都想自己干,这个世界上你干不完。

  71 永远要相信边上的人比你聪明。

  72 现在你需要踏踏实实,实实在在跟你一起干的人。

  73 每一笔生意必须挣钱,免费不是一个好策略,它付出的代价会非常大。

  74 领导力在顺境的时候,每个人都能出来,只有在逆境的时候才是真正的领导力。

  75 碰到灾难第一个想到的是你的客户,第二想到你的员工,其他才是想对手。

  76 有时候死扛下去总是会有机会的。

  77 永远记住每次成功都可能导致你的失败,每次失败好好接受教训,也许就会走向成功。

  78 暴躁在某种程度上讲是因为有不安全感,或者是自己没有开放的心态。

  79 上当不是别人太狡猾,而是自己太贪,是因为自己才会上当。

  80 可能一个人说你不服气,两个人说你不服气,很多人在说的时候,你要反省,一定是自己出了一些问题。

  81 一个成功的创业者,三个因素,眼光、胸怀和实力。

  82 别人可以拷贝我的模式,不能拷贝我的苦难,不能拷贝我不断往前的激情。

  83 年代的人还需要摔打,不管做任何事,要检查主观原因。

  84 做小了,一定要做到独特。

  85 不去想清楚就会变成一个包袱,一定要花时间去想。

  86 人永远不要忘记自己第一天的梦想,你的梦想是世界上最伟大的事情,就是帮助别人成功。

  87 创业者的激情有的在表面上,有的在内心里。

  88 不管你拥有多少资源,永远把对手想得强大一点。

  89 有结果未必是成功,但是没有结果一定是失败。

  90 没有一个良好的过程,任何一次成功都不可能被复制。

  91 永远把别人对你的批评记在心里,别人的表扬,就把它忘了。

  92 做任何事,必须要有突破,没有突破,就等于没做。

  93 《赢在中国》没有失败者,只有幸运者。

  94 权威是你把权给别人的时候,你才能有真正的权利,你懂得倾听、懂得尊重,承担责任的时候,别人一定会听你,你才会有权威。
posted @ 2008-01-13 23:54 wdx2008 阅读(274) | 评论 (0)编辑
<location path="lilacadmin">
        
<system.web>
            
<globalization requestEncoding="GB2312" responseEncoding="GB2312"/>
            
<pages theme="admin"></pages>
        
</system.web>
    
</location>
给不同文件夹设置数据库链接
<location path="t">
        
<appSettings>
            
<add key="strconn2" value="/App_Data/db.mdb"/>
        
</appSettings>
    
</location>
    
<appSettings>
            
</appSettings>
posted @ 2007-12-26 05:42 wdx2008 阅读(23) | 评论 (0)编辑
支付宝发送
AlipayClass.MyAlipay pay = new AlipayClass.MyAlipay();
       Hashtable ht 
= new Hashtable();
       ht.Add(
"seller_email""wdx2011@163.com");
       ht.Add(
"billid""96578556656688");
       ht.Add(
"goodname""AilpayClass");
       ht.Add(
"price""0.01");
       ht.Add(
"msg""AilpayClass");
       ht.Add(
"returnurl""http://localhost:56/2.aspx");
       ht.Add(
"showurl""www.lilacshop.com");
       ht.Add(
"encode""GB2312");
       pay.Send(ht);

获取状态
 AlipayClass.MyAlipay pay = new AlipayClass.MyAlipay();
           Response.Write(pay.GetState(
"gb2312")+"<br>");//获取交易状态1为已支付 2预支付 0为失败 否则返回其它支付状态码
           Response.Write("订单号:" + pay.GetState("out_trade_no""gb2312")); //输入返回状态中参数及页面编码 out_trade_no为订单号
           
//Response.Write(pay.GetState("gb2312", true));//启用调试打印具体信息

网银
 AlipayClass.ChinaBank cb = new AlipayClass.ChinaBank();
           Response.Write(cb.GetState()
+"<br>");
           Response.Write(
"v_oid:"+cb.GetState("v_oid")+"<br>");
           Response.Write(
"v_psstring:" + cb.GetState("v_psstring"+ "<br>");
posted @ 2007-12-26 05:01 wdx2008 阅读(54) | 评论 (0)编辑

使用MSSQL事务回滚总结
 1.默认为SET XACT_ABORT OFF 即遇到错误时回滚(真是晕,这不叫回滚,遇到错误当然不能执行了)所以干脆说默认回滚不起作用。
 2.SET XACT_ABORT OFF
   。。。
  COMMIT TRAN
  这时才是所谓真正的事务,遇到任何错误事务回滚
 3.SET XACT_ABORT OFF
   。。。
   这时遇到错误时事务回滚,错误前的操作正常

  另@@IDENTITY 系统产销
==============================
理解 @@IDENTITY

@@IDENTITY 返回最后一个插入 IDENTITY 的值,这些操作包括:INSERT, SELECT INTO,或者 bulk copy。如果在给没有 IDENTITY 列的其他表插入记录,系统将其置为 null。如果有多行记录插入到 IDENTITY 表中,@@IDENTITY 表示最后一个产生的值。如果触发了某个触发器,并且这个触发器执行向另一个带有 IDENTITY 列的表的插入操作,@@IDENTITY 将返回这个由触发器产生的值。如果这个触发器插入的表中不包含 IDENTITY 列,那么 @@IDENTITY 将为 null。如果插入操作失败,@@IDENTITY 值依然会增加,所以 IDENTITY 不保证数据的连续性。



一、准备工作:

       1、首先我们创建测试数据库:

create database demo

    2、创建数据表和测试数据:(这里注意外键控制)

use demo
CREATE TABLE student
(    
        stuid 
int NOT NULL PRIMARY KEY,
        stuname 
varchar(50)
)
CREATE TABLE score 
(
        stuid 
int NOT NULL REFERENCES student(stuid),
        score 
int
)
GO

INSERT INTO student VALUES (101,'zhangsan'
INSERT INTO student VALUES (102,'wangwu'
INSERT INTO student VALUES (103,'lishi'
INSERT INTO student VALUES (104,'maliu'

GO

二、各种用法及输出结果:

      1、语句1:

use demo

--Invoking a run-time error
SET XACT_ABORT OFF
BEGIN TRAN
    
INSERT INTO score  VALUES (101,90)
    
INSERT INTO score VALUES (102,78
    
INSERT INTO score VALUES (107,76/* Foreign Key Error */ 
    
INSERT INTO score VALUES (103,81
    
INSERT INTO score VALUES (104,65
COMMIT TRAN
go

      结果1:只回滚错误行,语句还继续执行。

--select * from score
101    90
102    78
103    81
104    65

 

      2、语句2:

use demo

--事务回滚
SET XACT_ABORT on
BEGIN TRAN
    
INSERT INTO score  VALUES (101,90)
    
INSERT INTO score VALUES (102,78
    
INSERT INTO score VALUES (107,76/* Foreign Key Error */ 
    
INSERT INTO score VALUES (103,81
    
INSERT INTO score VALUES (104,65
COMMIT TRAN
go

      结果2:事务终止并全部回滚,结果为空。

--select * from score

      3、语句3:

use demo

--事务在错误行终止,错误行回滚,错误行之前的不回滚
SET XACT_ABORT on
BEGIN
INSERT INTO score  VALUES (101,90)
    
INSERT INTO score VALUES (102,78
    
INSERT INTO score VALUES (107,76/* Foreign Key Error */ 
    
INSERT INTO score VALUES (103,81
    
INSERT INTO score VALUES (104,65
END
go

      结果3:出现这种是因为系统把每个insert语句都看成是单独的事务,所以错误行以前的是不回滚的。

--select * from score
101    90
102    78