Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合。它没有用户界面,并且也不会产生任何可视输出。任何用户消息都会被写进Windows事件日志。计算机启动时,服务会自动开始运行。它们不要用户一定登录才运行,它们能在包括这个系统内的任何用户环境下运行。通过服务控制管理器,Windows服务是可控的,可以终止、暂停及当需要时启动。
注:因任何消息都会写到windows事件日志,故当服务启动不了的时候如:“服务启动后又停止了。一些服务自动停止 如果它们没有什么可做的”这种问题出现时,可打开控制面板-管理工具-事件查看器:查看应用程序的日志
2,创建方法:
1. 新建一个项目 从一个可用的项目模板列表当中选择Windows服务
? OnStart ? 控制服务启动执行的代码 ? OnStop ? 控制服务停止执行的代码

2,添加安装程序
1. 将这个服务程序切换到设计视图
2. 右击设计视图选择“添加安装程序”
3. 切换到刚被添加的ProjectInstaller的设计视图
4. 设置serviceInstaller1组件的属性:
1) ServiceName = My Sample Service
2) StartType = Automatic
5. 设置serviceProcessInstaller1组件的属性
1) Account = LocalSystem
NetworkService 在当前正使用 NetworkService 帐户运行的提供程序宿主进程中激活提供程序。
LocalService 在当前正使用 LocalService 帐户运行的提供程序宿主进程中激活提供程序。
LocalSystem 在当前正使用 LocalSystem 帐户运行的提供程序宿主进程中激活提供程序。
6. 生成解决方案

3,安装
1, 打开Visual Studio .NET命令提示
2. 改变路径到你项目所在的bin\Debug文件夹位置(如果你以Release模式编译则在bin\Release文件夹)
3. 执行命令“InstallUtil.exe MyWindowsService.exe”注册这个服务,使它建立一个合适的注册项。
或在.net framework的C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 执行:installutil 服务程序路径+文件名.exe
4, 卸载用:installutil /u 服务程序路径+文件名.exe

4,调试: 服务不能象普通应用程序那样,只要简单地在开发环境下执行就可以调试了。服务必须首先被安装和启动.
1. 安装服务并启动, 设置程序断点
2. 点击“调试”菜单
3. 点击“进程”菜单
4. 确保 显示系统进程 被选
5. 在 可用进程 列表中,把进程定位于你的可执行文件名称上点击选中它
6. 点击 附加 按钮
7. 点击 确定

注:在第5步时若服务为灰色,附件上到….选择中:调试以下代码类型!

3, 定时器使用
1,命名空间 System.Timers; Timer _timer = new Timer();
2,方法及属性
AutoReset 获取或设置一个值,该值指示 Timer 是应在每次指定的间隔结束时引发 Elapsed 事件,还是仅在指定的间隔第一次结束后引发该事件。true时Elapsed定时执行,false执行一次停止
Enabled 获取或设置一个值,该值指示 Timer 是否应引发 Elapsed 事件。
Interval 获取或设置引发 Elapsed 事件的间隔。
定时事件:_timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
private void OnTimedEvent(object source, ElapsedEventArgs e) { }

(2)控件添加

4,实例:定时插入文本

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.IO;
using System.Timers;

namespace MyServices
{

public partial class Service1 : ServiceBase
{
string filePath = “F:\\temp.txt”;
static int i = 0;
Timer _timer = new Timer();
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
_timer.AutoReset = true;
_timer.Interval = 2000;
_timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
_timer.Start();

}
private void OnTimedEvent(object source, ElapsedEventArgs e) {

Stream fs = File.OpenWrite(filePath);
TextWriter sw = new StreamWriter(fs);
i++;
sw.WriteLine(i.ToString() + “, hi, this is my first Services”);
sw.Flush();
sw.Close();
}
protected override void OnStop()
{
Stream fs = File.OpenWrite(filePath);
TextWriter sw = new StreamWriter(fs);
sw.WriteLine(“panel !!!!!!!!!!!!!!!”);
sw.Flush();
sw.Close();
}

}
}


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

? 1 response.redirect  这个跳转页面的方法跳转的速度不快,因为它要走2个来回(2次postback),转向后会丢失此页所有的Request的参数
 2  server.transfer  forward  速度快,只需要一次postback ,但是。。。。他必须是在同一个站点下
 3  sever.execute  这个方法主要是用在页面设计上面,而且他必须是跳转同一站点下的页面。这个方法是需要将一个页面的输出结果插入到另一个aspx页面的时候使用,大部分是在表格中,将某一个页面类似于嵌套的方式存在于另一页面。Server.Execute(a.aspx),它和Server.Transfer功能类似。主要的区别在于,server.execute在转向a.aspx执行完成后,还会返回原来的页面继续处理。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

ClientScript.RegisterClientScriptBlock( this.GetType(), “back”, “<script>window.history.go(-2);</script>”);

回点击按纽的时候页面已经刷新了一次,故要返回到之前的要为-2, 而不是-1


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

?TextBox: 默认为空字串””, 而不是null

SELECT? @OrderNo = OrderNo FROM bdOrder a
JOIN bmdCustomer b ON a.customerid = b.id WHERE b.Tel = ‘13769688430’

@OrderNo 的值为查询到的值, 若一条数据也没有,则@OrderNo保留原值


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

System.Guid.NewGuid().ToString();


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

ViewState赋值后,在客户端以序列化形式保存。当发生窗体回调之后,服务器在LoadViewState方法里复原。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

?服务端返回让页面执行js的方法有三种:
1,Response.Write(“<script>alert(‘开头成功’);</script>”);
??? 因是Response,故一般会将js加在<html>标签之前,有时可能会使css不能正确执行
?2,ClientScript.RegisterClientScriptBlock( this.GetType(), “show”, “<script>alert(‘更新成功’);</script>” );
??? 将js加在紧跟着<form>标签出现之后,第一个
?3,ClientScript.RegisterStartupScript(this.GetType(), “show“, “<script>alert(‘最后成功’);</script>”);
将js加在紧跟着</form>标签出现之前,最后一个

RegisterStartupScript第二个形参指定js的关键字,要唯一,若相同,则以第一个为主
注:还可利用ClientScript让页面载入js文件:
Page.ClientScript.RegisterClientScriptBlock(Me.GetType(),?”MyScript”,? “MyJavaScriptFile.js”)

ClientQueryString: 得到传来的?之后的参数


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

?a.直接向控件添加客户端属性
<asp:Button ID=”MyButton” Text=”ClickMe” onmouseover=”this.style.cursor=’pointer'” runat=”server” />

b.调用内置方法
可以通过调用WebControl.Attributes.Add()方法为控件添加客户端属性,如下所示:

MyButton.Attributes.Add(“onmouseover”, “this.style.cursor=’pointer'”);

c. OnClientClick
MyButton.OnClientClick = “alert(‘Hello!’)”;


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

下加入:
整个工程默认接收与发送都按gb2312进行。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
 public static void format(System.Web.UI.Control page, bool bFalg)
        {
            int nPageControls = page.Controls.Count;
            for (int i = 0; i < nPageControls; i++)
            {
                foreach (System.Web.UI.Control control in page.Controls[i].Controls)
                {
                    if (control.HasControls())
                    {
                        format(control, bFalg);
                    }
                    else
                    {
                        if (control is TextBox)
                            (control as TextBox).Enabled = bFalg;
 
                       if (control is Button)
                            (control as Button).Enabled = bFalg;
                        if (control is CheckBox)
                            (control as CheckBox).Checked = bFalg;
}


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

?每个页面的生命周期为用户的每一次访问,也就是说每一次客户端与服务器之间的一个往返过程.全局变量的生命周期在此之间. 也就是说,每次都会重建类对象,成员变量当然会初始化。但static的就会被共享。或存入于 ViewState中
1,!IsPostBack 用于第一个生命周期创建时。
2,Page_Load事件会在每次返回到服务器时执行,无论是点击按纽还是其它。故Page_Load主要用于各个控件通用的操作。

由上知:在每次刷新时,页面的状态会被保存,而对应类的非static成员则每次都将被初始化,故在IsPostBack中进行页面控件状态的设置如:btn1.visible =false;
而在之后根据条件做变量的设置。
if( !IsPostBack ){
??? //页面状态设置
???? txtOrderDate_begin.Text = DateTime.Now.ToString(“yyyy-MM-dd”);
???? txtOrderDate_end.Enabled = false;
}
//每次刷新,进行变量设置, 若是从数据库中取值,放到viewstatue,免得每次刷新都要操作数据库
if ( ViewState[“isReviewer”] !=null ){
??? isReviewer = stringhelper.formatobjtobool(ViewState[“isReviewer”]);
}else{
? if (_userBL.GetRoleByAccount(user.Account) == DataBaseConstant.ROLE_REVIEWER)
??????????????? {
??????????????????? isReviewer = true;
?? ??? ??? ??? ???? ViewState[“isReviewer”] = isReviewer;
??????????????? }
}


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1, 可调用的Services , 提供IP,天气, 国内手机号码归属地等服务。
引用方法:工程右健 添加WEB引用,输入URL,引用对应的命名空间如:webxml,生成类调用方法即可。

2,自定义WebServices: 添加新项,WebServices, 在生成的WebService2.cs中编写对应的方法即可。

  • 新建ASP.NET Web服务应用程序
  • 在.asmx.cs的[WebMethod]下编写代码
  • 使用:项目右键,添加Web引用,引用命名空间,直接调用。

3,ajax 引用webservice:单击service属性后面 的按钮,就出现servicereference collection editer??》单击add??》在右边的path属性中填上服务的路径??》单击ok


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

????? string url = @”http://www.input8.com/ip/?ip=59.38.240.54“;
??????????? HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
??????????? httpWebRequest.Method = “GET”;
??????????? HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
??????????? if (((int)httpWebResponse.StatusCode) >= 400)
??????????? {
?????????????? ????? return;
??????????? }
??????????? Stream responseStream = httpWebResponse.GetResponseStream();
??????????? StreamReader streamReader = new StreamReader(responseStream, Encoding.UTF8);
??????????? String result = streamReader.ReadToEnd().Trim();?? //result为得到的URL源码
??????????? httpWebResponse.Close();
??????????? streamReader.Close();


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

每一个ASP.NET程序执行时都会对当前URL的请求进行解析,本文将分析ASP.NET页面请求的原理。当我们在浏览器上输入一个URL时, 流程如下:

首先被WWW服务器截获(inetinfo.exe进程), 该进程首先判断页面后缀, 然后根据IIS中配置决定调用具体的扩展程序。

如aspx就会调用aspnet_isapi.dll, 然后由aspnet_isapi.dll发送给w3wp.exe(iis 工作者进程,IIS6.0中叫做 w3wq.exe,IIS5.0中叫做 aspnet_wp.exe).

接下来就是w3wp.exe调用.net类库进行具体处理,流程如下:

ISAPIRuntime–>HttpRuntime–>HttpApplicationFactory–>HttpApplication–>HttpModule–HttpHandlerFactory–>HttpHandle

1. ISAPIRuntime

主要作用是调用一些非托管代码生成HttpWorkerRequest对象,HttpWorkerRequest对象包含当前请求的所有信息,然后传递给HttpRuntime,这里生成的HttpWorkerRequest对象可以直接在我们的页面中调用的,通过它取得原始的请求信息:

2. HttpRuntime
a. 根据HttpWorkerRequest对象生成HttpContext,HttpContext包含request、response等属性;
b. 调用HttpApplicationFactory来生成IHttpHandler(这里生成的是一个默认的HttpApplication对象,HttpApplication也是IHttpHandler接口的一个实现)
c. 调用HttpApplication对象执行请求

3. HttpApplicationFactory.

主要是生成一个HttpApplication对象:

首先会查看是否存在global.asax文件,如果有的话就用它来生成HttpApplication对象,从这里我们可以看到global.asax的文件名是在asp.net的框架中写死的,不能修改的。如果这个文件不存在就使用默认的对象。

4. HttpApplication

这个是比较复杂也比较重要的一个对象, 首先是执行初始化操作,比较重要的一步就是进行HttpModule的初始化:

HttpApplication代表着程序员创建的Web应用程序。HttpApplication创建针对此Http请求的 HttpContext对象,这些对象包含了关于此请求的诸多其他对象,主要是HttpRequest、HttpResponse、 HttpSessionState等。这些对象在程序中可以通过Page类或者Context类进行访问。

它会读取web.config中所有HttpModule的配置

5. HttpModule

6. HttpHandlerFactory

7. HttpHandler


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

<asp:Button ID=”btnConfirm” runat=”server” Text=”保存确认结果” onClientClick=”return chekCancel();” OnClick=”btnConfirm_Click” />
要加上return, 当返回为true时,才执行服务器上的OnClick

注:用onClick, onClientClick看控件是否拥有服务器上的onClick,若有,则onClick在服务器上运行,若没有,onClick在客户端上运行。具体看html源文件,看生成的控件是什么类型。


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

Session默认存在服务器的内存上,易丢失。可存在别的当前服务器之外的电脑上,或存入sql server这样即使服务器重启也不会丢失。

Asp.net 默认配置下,Session莫名丢失的原因及解决办法
正常操作情况下Session会无故丢失。因为程序是在不停的被操作,排除Session超时的可能。另外,Session超时时间被设定成60分钟,不会这么快就超时的。

这次到CSDN上搜了一下帖子,发现好多人在讨论这个问题,然后我又google了一下,发现微软网站上也有类似的内容。

现在我就把原因和解决办法写出来。


原因:
由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下:
<sessionState mode=’InProc’ stateConnectionString=’tcpip=127.0.0.1:42424‘ sqlConnectionString=’data source=127.0.0.1;Trusted_Connection=yes’ cookieless=’true’ timeout=’60’/>

我们会发现sessionState标签中有个属性mode,它可以有3种取值:InProc、StateServer?SQLServer(大小写敏感) 。默认情况下是InProc,也就是将Session保存在进程内(IIS5是aspnet_wp.exe,而IIS6是W3wp.exe),这个进程不稳定,在某些事件发生时,进程会重起,所以造成了存储在该进程内的Session丢失。

哪些情况下该进程会重起呢?微软的一篇文章告诉了我们:
1、配置文件中processModel标签的memoryLimit属性
2、Global.asax或者Web.config文件被更改
3、Bin文件夹中的Web程序(DLL)被修改
4、杀毒软件扫描了一些.config文件。
更多的信息请参考PRB: Session variables are lost intermittently in ASP.NET applications

解决办法:
前面说到的sessionState标签中mode属性可以有三个取值,除了InProc之外,还可以为StateServer、SQLServer。这两种存Session的方法都是进程外的,所以当aspnet_wp.exe重起的时候,不会影响到Session。

现在请将mode设定为StateServer。StateServer是本机的一个服务,可以在系统服务里看到服务名为ASP.NET State Service的服务,默认情况是不启动的。当我们设定mode为StateServer之后,请手工将该服务启动。

这样,我们就能利用本机的StateService来存储Session了,除非电脑重启或者StateService崩掉,否则Session是不会丢的(因Session超时被丢弃是正常的)。

除此之外,我们还可以将Session通过其他电脑的StateService来保存。具体的修改是这样的。同样还在sessionState标签中,有个stateConnectionString=’tcpip=127.0.0.1:42424’属性,其中有个ip地址,默认为本机(127.0.0.1),你可以将其改成你所知的运行了StateService服务的电脑IP,这样就可以实现位于不同电脑上的Asp.net程序互通Session了。

如果你有更高的要求,需要在服务期重启时Session也不丢失,可以考虑将mode设定成SQLServer,同样需要修改sqlConnectionString属性。关于使用SQLServer保存Session的操作,请访问这里。

在使用StateServer或者SQLServer存储Session时,所有需要保存到Session的对象除了基本数据类型(默认的数据类型,如int、string等)外,都必须序列化。只需将[Serializable]标签放到要序列化的类前就可以了。
如:
[Serializable]
public class MyClass
{
??? ……
}
具体的序列化相关的知识请参这里。

至此,问题解决。
关于asp.net Session丢失问题的总结
asp中Session的工作原理:
asp的Session是具有进程依赖性的。ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。所以当inetinfo.exe进程崩溃时,这些信息也就丢失。另外,重起或者关闭IIS服务都会造成信息的丢失。

asp.net Session的实现
asp.net的Session是基于HttpModule技术做的,HttpModule可以在请求被处理之前,对请求进行状态控制,由于Session本身就是用来做状态维护的,因此用HttpModule做Session是再合适不过了。

原因1:
bin目录中的文件被改写,asp.net有一种机制,为了保证dll重新编译之后,系统正常运行,它会重新启动一次网站进程,这时就会导致Session丢失,所以如果有access数据库位于bin目录,或者有其他文件被系统改写,就会导致Session丢失

原因2:
文件夹选项中,如果没有打开“在单独的进程中打开文件夹窗口”,一旦新建一个窗口,系统可能认为是新的Session会话,而无法访问原来的Session,所以需要打开该选项,否则会导致Session丢失

原因3:
似乎大部分的Session丢失是客户端引起的,所以要从客户端下手,看看cookie有没有打开

原因4:
Session的时间设置是不是有问题,会不会因为超时造成丢失

原因5:
IE中的cookie数量限制(每个域20个cookie)可能导致session丢失

原因6:
使用web garden模式,且使用了InProc mode作为保存session的方式

解决丢失的经验
1. 判断是不是原因1造成的,可以在每次刷新页面的时候,跟踪bin中某个文件的修改时间
2. 做Session读写日志,每次读写Session都要记录下来,并且要记录SessionID、Session值、所在页面、当前函数、函数中的第几次Session操作,这样找丢失的原因会方便很多
3. 如果允许的话,建议使用state server或sql server保存session,这样不容易丢失
4. 在global.asa中加入代码记录Session的创建时间和结束时间,超时造成的Session丢失是可以在SessionEnd中记录下来的。
5. 如果有些代码中使用客户端脚本,如javascript维护Session状态,就要尝试调试脚本,是不是因为脚本错误引起Session丢失


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1, string cc = @”http://www.baidu.com/s?wd=“;
?? cc = cc+ HttpUtility.UrlEncode(“郑雪松”, System.Text.UnicodeEncoding.GetEncoding(“GB2312”));
?
2,解出url: System.Web.HttpUtility.UrlDecode(url, System.Text.UnicodeEncoding.GetEncoding(“GB2312”));
?? google用:System.Web.HttpUtility.UrlDecode(bb);? 不指定编码格式

UrlEncode 加密 UrlDecode解密就可防止页面按自己设置的编码格式转换,出现乱码问题
3,

百度搜索命令中的参数

必备参数:

wd??查询的关键词(Keyword)

oq??上一次查询的关键词(Keyword)

pn??显示结果的页数(Page Number)

cl??搜索类型(Class),cl=3为网页搜索

可选参数:

rn??搜索结果显示条数(Record Number),取值范围在10–100条之间,缺省设置rn=10

ie??查询输入文字的编码(Input Encoding),缺省设置ie=gb2312,即为简体中文

tn??提交搜索请求的来源站点

tn=baidulocal 表示百度站内搜索,返回的结果很干净,无广告干扰.

tn=baiducnnic 想把百度放在框架中吗?试试这个参数就可以了,是百度为Cnnic定制的

si??在限定的域名中搜索,比如想在sofuc.com的站内搜索可使用参数si=sofuc.com,要使这个参数有效必须结合ct参数一起使用.

ct??此参数的值一般是一串数字,估计应该是搜索请求的验证码

si和ct参数结合使用,比如在sofuc.com中搜索”wordpress”,可用:http://www.baidu.com/s?q=& amp;ct=2097152&si=sofuc.com&ie=gb2312&cl=3&wd=wordpress

bs??上一次搜索的关键词(Before Search),估计与相关搜索有关


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

右键点 Microsoft Visual SourceSafe 启动的快捷方式,属性,修改目标栏

  用 -y 参数输入用户名和密码(无密码的可以只输入和用户名,在-y之前加个空格)
 如:
“C:\Program Files\Microsoft Visual SourceSafe\ssexp.exe” -yMyName,MyPassword


Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58

1,传参与调用:
?SqlParameter[] storedParams = {
????????????????????????????????????????????? new SqlParameter(“@TranType”, “INSERT”),
??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ? new SqlParameter(“@RoleName”, _RoleEntity.RoleName),
????????????????????????????????????????????? new SqlParameter(“@description”, _RoleEntity.Description),
????????????????????????????????????????????? new SqlParameter(“@CreateBy”, _RoleEntity.CreateBy),
????????????????????????????????????????????? new SqlParameter(“@isValid”, _RoleEntity.IsValid),
??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ? new SqlParameter(“@isSystem”, _RoleEntity.IsSystem),???????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????? //new SqlParameter(“@LastEditBy”, _RoleEntity.LastEditBy),
?????????????????????????????????????????????
????????????????????????????????????????? };

??????????????? _RoleEntity.ID = int.Parse(SqlHelper.ExecuteScalar(HelpConstant.DBCONN_STRING,
??????????????????? CommandType.StoredProcedure,?????? //指定按存储过程执行
??????????????????? “frmRole_save”,?????????????????????????????? //存储过程名称
??????????????????? storedParams).ToString());
传的参数小于等于存储过程指定的参数个数,不能有存储过程不存在的参数。

2,存储过程技巧
????? 1,AND OrderNo LIKE ISNULL(@OrderNo, ”) + ‘%’? // 有则查,无查全部
????? 2, AND CONVERT(varchar(10), OrderDate, 20) =, //AND 语句中加入选择!
??? ??? CASE(ISNULL(@OrderDate, ”))
??? ??? ??? WHEN ” THEN? CONVERT(varchar(10), OrderDate, 20)
??? ??? ??? ELSE @OrderDate END
上面的可直接换成下面方式:先计算出值再查询
?IF ( @CustomerName IS NULL )
??? BEGIN
??? ??? SET @CustomerName = ”
??? END
?IF ( @ShipDateEnd IS NULL OR @ShipDateEnd = ” )
??? BEGIN
??? ??? SET @ShipDateEnd = ‘2999-01-01′
??? END???

3, 右连接对指定的条件进行聚合
SELECT DISTINCT ACCOUNT, a.departmentid,sum(a.amount) as amount FROM bdOrder a
RIGHT JOIN permUserDepartment p
on a.SalesStaff = p.Account
AND a.orderstatus = ’07’
where?? a.DepartmentID is null or a.DepartmentID IN (SELECT DepartmentID FROM permUserDepartment(NOLOCK)??? WHERE Account = ‘sa’)? — 销售部门
group by account,a.departmentid
order by account,a.departmentid