update workorder set colour=REPLACE(colour,'IWS3350','IWS5001') WHERE 1=1 AND workorder.workorder_id in ( SELECT distinct workorder.workorder_id FROM workorder, task WHERE 1=1 AND workorder.workorder_id = task.workorder_id AND workorder.project_code='M000821' AND workorder.colour like '%IWS3350%' ---AND workorder.oracle_workorder_code in ('167578') )
1>请问如何设定呀 ?
因为我取表时, 通过adoConnection=> odbc 连接=> user +pass
如何通过动态字符串加入呢?
btn1.Attributes.Add("onclick","if (!confirm('" +this.hidFlag.Value+ "')) return false;");
this.txt1.Attributes.Add("onkeyPress", "if(event.keyCode==13){document.all.cmdConfirm.click();}" );
txt1.Attributes.Add("size","20");
AND workorder.workorder_id in
(
SELECT distinct workorder.workorder_id FROM workorder, task WHERE 1=1
AND workorder.workorder_id = task.workorder_id
AND workorder.project_code='M000821'
AND workorder.colour like '%IWS3350%'
---AND workorder.oracle_workorder_code in ('167578')
)
例如只给当前schema的权限.这样就只会显示当前对象,而其它的就不会显示了.
//静态方法不能标记为 override、virtual 或 abstract,即静态方法都必须是具体的
/抽象类:含有一个或多个抽象方法的类称为抽象类,在声明时,类名前须添加"abstract"关键字
//抽象类中可以包含非抽象方法
//抽象类不能够被实例化,这是因为它包含了没有具体实现的方法,即可实例化的类一定不是抽象类,不包含未具体实现的抽象方法。
//子类继承抽象父类后,可以使用override关键字覆盖父类中的抽象方法,并做具体的实现。也可以不实现抽象方法,留给后代实现,这时子类仍旧是一个抽象类,必须声明为abstract
//继承的抽象方法不可以被隐藏
//隐藏:在子类中创建与父类中的方法具有相同签名(相同的方法名,相同的参数列表--参数类型和次序)的方法(可以带有"virtual"或"override"关键字)即可实现,但建议使用"new"关键字,以明确地隐藏。
//只能使用"override"关键字来覆盖(override)父类中标记为"virtual"、"abstract"或"override"的方法,而子类中标记为override的方法,也必须是父类中标记为"virtual"、"abstract"或"override"的方法。
//覆盖(override):必须使用override关键字,可以被覆盖的方法包括标记为abstract,virtual,和override的方法;
//隐藏:使用new关键字,也可不使用关键字,可以被隐藏的方法包括一般方法,和标记为virtual"或"override"的方法;
//重载(overload):不需要任何特殊的关键字
//静态方法可以被隐藏或重载
一、 对象
对象是具有数据、行为和标识的三部分编程结构。对象的数据包含在对象的字段、属性、事件中。对象的行为则由对象的方法和接口定义。对象通过classe和struts定义。对象通过标识来区分是否相同。对象都是从类和结构中定义的模板实例化得到。均继承于Object类。
二、 类
类定义了数据类型的数据和行为。可以根据这些来创建类的实例化对象。类支持继承但不可以多继承。类属于引用对象。最终类可以有很多个基类(类继承基类而导致)。可以实现多个接口。类和对象本质有不同,类是对象的类型,对象是类的实例。
三、 分部类
分部类可以将类、结构、或接口的定义拆分到两个或多个源文件中,每个源文件都包括类定义的一部分,编译时把所有部分组合起来。使用partial定义。
四、 结构
结构:定义基本于类相同,结构声明时,如果字段不是const或static,就无法初始化。结构不可以声明默认的构造函数(无参构造函数)或析构函数。可以声明带有参数的构造函数。结构副本由编译器自动创建和销毁,故不需要。结构不可以从类或其他结构继承。属于值类型,结构实例化不可以使用new,不可以继承,直接继承自System.ValueType。可以实现接口。
五、 继承
类继承通过:号定义,:号后为要继承的单一的基类。由基类派生的类将会获得基类所有非私数据和行为(方法)以及派生类为自己定义的所有其它数据或行为(方法),所以派生类有两个有效类型:派生类型和基类类型。
六、 抽象类
使用abstract定义用来继承的类和成员。抽象类不可以实例化,用来提供多个派生类可以共享的基类的公共定义(有点类似接口的意思),抽象类可以定义抽象方法,用abstract定义,但不可以有方法的实现。由抽象类派生的类必须实现抽象方法。
七、 密封类
使用sealed关键字来定义防止继承以前标记的为virtual的类或某些成员。密封类主要用来防止派生。
八、 多态
一个类可以用作多种类型,可以作自己的类型,可以做基类,可以实现接口时用作任何接口类型。
九、 接口
接口使用interface定义,可以描述属于任何类或结构的一组相关行为,可由方法、属性、事件、索引器或这四种成员类型的任何组合构成。接口不可以包含字段,必须为公共的。可以同时继承多个接口,只能继承到方法名称和签名。
十、 类成员
包括字段、属性、方法、事件、运算符、索引器、构造函数、析构函数、嵌套类型。
十一、 方法
方法包括一些类语句的代码块,方法在类或结构中声明,需要指定访问级别,返回值,方法名称以及任何方法参数。
十二、 构造函数
类和结构可以有多个接受不同参数的构造函数,可以使得可以设置默认值,限制实例化等功能。
十三、 析构函数
只能对类定义析构函数,并且一个类的析构函数唯一,无法继承和重载,无法调用,无修饰符和参数。
十四、 字段
包含在类或结构中的对象和值,字段可以使类和结构封装数据。一般用private,通过方法、属性或索引器访问字段。
十五、 常量
类和结构可以将常数声明为成员,用const修饰。
十六、 嵌套类型
在类或结构中定义的类型为嵌套类型,默认为private可以设置为其它修饰符,
十七、 静态类
静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数,静态类成员可以用于分离独立于任何对象标识的数据和行为。
internal 可以在类内部调用
protected 只能在被类的成员和该类的子类调用
private 只能在被类的成员调用
public任何地方都可以调用
internal同一应用程序集内部(在VS.Net中一个工程中)
private 只能在被类成员调用
protected 类和它的子类
protected internal同一应用程序集内类和它的子类
一、ASP.NET创建网站的两种方式:
文件系统:VS2005新增的模式,不需要安装IIS,使用内置的"ASP.NET程序开发服务器",并且随机给网站分配一个Port。
本地IIS:传统的Web开发模式,使用操作系统的IIS服务器。
二、Web开发环境:
1、 解决方案的设置:在VS2005中当建立一个网站的时候会发现只有网站项目,不像VS2003中会自动出现一个"解决方案",除非你添加第二个项目的时候“解决方案”才会显示出来。
用户可以从<工具>-<选项>-<项目和解决方案>中将“总是显示解决方案”打勾,即可将解决方案显示出来。
2.、对单页进行编译:在VS2003中对网站中某一页面的小小改动也要对整个网站进行整体编译,在VS2005中可以针对某一页进行编译.
在相应的页面上右击选择<生成页>即可。
3、开发界面模式:在VS2005中承延了VS2003中的两种开发界面“设计模式”和“代码模式(源文件模式)”。系统默认的是“源文件模式”。
<工具>-<选项>-<HTML设计器>-<起始页位置>中选择地“设计视图”。
4、页面布局的设置:在VS2003中Web页面的布局默认是GridLayout绝对定位模式,开发时候给人一种很不舒服的感觉,在VS2005中把默认的Web页的布局设为FlowLayout相对定位模式,如果你想把页面默认布局设为绝对定位的话,进行如下操作:
<工具>-<选项>-<HTML设计器>-<CSS定位>中选中“绝对定位”
5、显示不可见的元素:有一些不可见的元素如<span><div>等,默认不会在设计视图中显示出来。
<工具>-<选项>-<HTML设计器>-<显示>中选中“显示不可见元素的详细信息”。
6、行号设置:<工具>-<选项>-<文本编辑器>-<所有语言>将“行号”选择。
7、以文件系统开发时把端口号固定:在以文件系统开发时,系统自动生成的端口号是随机的,这给我们运行程序带来了困难,如何将端口号固定下来呢?
a. <工具>-<外部工具>-<添加>,输入下列设置
标题:MyWebServer
命令:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\WebDev.WebServer.EXE
参数:/port:8080 /path:$(ProjectDir) /vpath:"/websit2"
b.点击<工具>-<MyWebServer>启动Web服务器
c.右击项目,选择<启动选项>-<使用自定义服务器>在后面的输入框中输入"http://localhost/8080"
d.运行项目,这样就可以在固定的端口下运行项目了。
8、代码段:
用过JCreator的朋友可能感觉里面的代码模板实在是太好用了,有人问VS中有没有这样的功能。当初在VS2003的时候我也曾为此遗憾过,但到了VS2005中我们兴奋地发现“代码段”就是我们要找的那种功能。
右击选择“插入代码段”,或者按Ctrl+K+X就会列出我们要找的代码段,当然还可以去网上下载更多的代码段,或自己扩充代码段。
9、代码的重构:
代码重构不是代码的重写,它是对现有的代码进行重新组织或调整。如:把某段代码提取出来放在一个独立的方法中,重命名某个方法及其引用者,将方法中的局部变量变为实参的参数等等。
选中相应的代码段,右击选择“重构”再选择要应的重构方式。
10、同一项目中使用VB.Net和C#同进开发:
在VS2003中对于一个项目,只能使用一种开发语言进行开发。到了VS2005中我们可以对一个项目使用不同的开发语言,但这并不意味着在一个.cs类文件中可以混合使用各种的开发语言。
要在一个项目中实现不同的开发语言共存
a.需要在App_Code文件夹中建立不同的子文件夹(如文件夹cs和文件夹vb),把不同语言的开发代码分别放在不同的子文件夹中.
b.在配置文件中进行如下配置:
<compilation debug="true">
<codeSubDirectories>
<add directoryName="cs"></add>
<add directoryName="vb"></add>
</codeSubDirectories>
</compilation>
c.在相应的文件夹中用不同的开发语言编写代码。
这样就可以在外面使用C#类或VB.Net类了
三、安装布署:
1、复制网站
在VS2003中的xcopy给开发人员的布署带来了很大的方便,但仍有不足之处。在VS2003中编译后的.dll文件是程序运行的文件,也为源代码保护提供了方便,但正因为运行的是.dll文件,所以,当源代码发生改变后必须要编译整个网站生成新的.dll文件,并把编辑出的.dll文件和新的.aspx文件Copy到服务器上才可以,这给网站的维护带来了很大的不便。
在VS2005中提供了“复制网站”的工具,可以把整个程序发布到本地或远程的IIS上,另外它还带有同步处理的功能,如果网站发生改变,你只需要同步处理一下就可以了。
在网站项目上右击,选择<复制网站>-<连接>-<本地IIS>-<创建新的Web应用程序>,将“源网站”的所有文件同步复制到“远程网站”上去就可以了,程序在第一次运行的时候会自动编译网站的.aspx和.cs文件。
2、预编译:
“复制网站”可以实现简单快速的布署,有心的朋友可能会发现这种布署方式会把程序源文件(.cs)文件一起发布到服务器上,并且找不到编译出的.dll文件,因为在“复制网站”的布署方式中,会在第一次运行的时候动态编译.aspx和.cs文件生成中间语言元数据,然后再生成页面对象。那VS2005如何做到源代码的保护呢?这时会有很多朋友怀念VS2003的编译模型,在第一次编译的时候就生成中间语言元数据,在VS2003中只需要把生成的.dll文件和.aspx文件布署就可以了,如此实现了对源代码的保护。
其实不用担心,VS2005是不会犯这种弱智的Bug。VS2005采用预编译的方式来实现源代码保护的,并且应用程序在第一次动行的时候省去一次编译的,达到更快的效果。
在VS2005的Dos窗口下运行aspnet_compiler -v webs "c:\temp\newwebs"
-v 后的第一个参数(webs):是要预编译的虚拟目录
-v后的第二个参数("c:\temp\newwebs") :是预编译后结果所存放的目标位置
预编译完成后,就可以在目标位置中查看编译结果,发现里面没有.cs文件,只剩下aspx文件,并且多出了一个bin文件夹。当你打开aspx文件后会发现它也被编译了,无法查看和修改。可见预编译比VS2003中的编译更深入。
最后你就把编译的结果放Copy到服务器的虚拟目录中就可以了。
3、发布网站:
预编译效果不错,担操作有点复杂,其实VS2005提供了预编译的简单操作,右击Web项目,选择“发布网站”按照向导进行操作即可,这样就会像复制网站一样简单,可以轻松实现预编译,并把预编译的结果发布到Web服务器上去。
四、CodeBehind模式的改进:
在VS2003中一个耀眼的亮点就是CodeBehind模式。在VS2005中又改进了VS2003的CodeBehind模式。在VS2003中所有在.aspx中所加入的控件都在对应的.cs文件中以成员变量的形式列出来,另外VS2003中会在对应的.cs文件中产生好多窗体自动生成的代码,对于这些自动生成的东西,对于初学者来说会感到一些恐慌,而对于熟练的程序员来说,是了解与控制页面运作的好的入口点。
在VS2005中的CodeBehind模式中,.cs文件中不再有太多的窗体自动生成的代码,这样使.cs文件更清晰,对初学者来说相对简单了。但对于熟悉面向对象的程序员来说,这里的页面类却有点不伦不类--为什么没有成员变量的声明却能够使用成员变量呢?而且要想对页面初始化进一步控制的话仿佛还要回归到VS2003的相关事件和方法中去寻找。尽管好多资料对这种新的CodeBehind模式进行推祟,但我感觉这种模式并利于初学者对页面类的理解。
1、partial关键字:partial类是VS2005对语法的一次重大改进,克服了过去“同一个类的成员必须写在同一个类的花括号内”的古老作法。它在类的定义的基础上,实现了写法上的“松散化”。
partial类可以重名,在编译的时候会把同名的partial类当成一个类来看待,这样我们就可以把一些复杂的类交给不同的程序员来编写,而省去了后期的代码合成的过程。
正是有了partial类,我的CodeBehind模式才会变得发此简单。大家试一下,把.cs文件中页面的类的partial关键字删掉,会出现什么情况?--会出错。为什么呢?因为在编译时.aspx文件和.aspx.cs两个文件会分别作为两个partial类看待,如果你把一个类的partial 关键字去掉的话当然会出现重名类了。现在你应当知道新的CodeBehind模式中的.cs文件为什么会如此简洁了吧?因为所有自动生成的内容全都封装在aspx这个partial类里了。当然这个.aspx文件的partial类可真的不太像一个传统意义上的类,但没办法,它确实作为类的身份进行运行。
2、Page指示词的变化:在VS2003中Page指示词中有一个属性"CodeBehind=...." ,但到了VS2005却变为"CodeFile=......"
1、注册数据库:
在ASP.NET2.0中提供许多新的功能,如验证与授权、WebPart、主体特征设置等,所有这些都依托数据库来实现,因此在使用这些新功能之前应当注册一下数据库
在VS2005的Dos窗口中,运行aspnet_regsql命令,会弹出一个向导对话框,可以根据提示信息,一步步完成数据库的注册。注册完成后,会在相应的数据库中产生11个表,这些表就是完成新功能所依托的数据表。
或直接在VS2005的Dos窗口中运行aspnet_regsql -S .\sqlexpress -U sa -P Test -d mydb -A all
2、连接字符串的设置:
在VS2005中连接字符串的设置已不推荐写在<appSettings>配置节中,而是写在<connectionStrings>配置节中,而<appSettings>配置节中可以进行一些其它的配置。如下:
<connectionStrings>
<add name="conn" connectionString="server=.\sqlexpress;database=mydb;uid=sa;pwd=123" />
</connectionStrings>
3、连接字符串的读取:
string str = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["conn"].ToString();
Response.Write(str);
4、加密连接字符串:
aspnet_regiis -pe "connectionStrings" -app "/webapp0831" -prov "RSAProtectedConfigurationProvider"
-pe 要加密的配置节元素名称
-app 要加密的应用程序虚拟目录
-prov 选择哪种方式进行加密
5、解密连接字符串:
aspnet_regiis -pd "connectionStrings" -app "/webapp0831"六、交叉提交:
交叉提交的场景:在一个aspx页面中输入数据(如:用户注册),在提交到另一个页面后,把用户刚才填写的信息全部显示出来,让用户确认无误后再提交到数据库去。
在asp可以通过form表单的action来指定一下跳转页面,然后在新页面中可以取出数据来。到了asp.net1.1后,其页面模型与asp有些不同,aspx页面与其对应的aspx.cs文件共同形成一个页面对象,用户填写的表单数据也就成为了页面对象的成员,由于HTTP协议的无状态性,用户在另一个页面取得前一个页面的数据就要花费很大的精力。
在asp.net2.0中新增了交叉提交的功能,这对程序员来说可真是“及时雨”,下面看一下如何使用交叉提交:
在asp.net2.0环境中,每一个按钮多了一个新的属性:PostBackUrl。PostBackUrl代表的是用户把数据提交到那个页面的URL地址。
1.访问源页面控件的内容:
有两个页面:SourcePage.aspx和TargetPage.aspx
//SourcePage.aspx 页面的HTML源代码如下:(请注意按钮的PostBackUrl属性)
<form id="form1" runat="server">
<asp:TextBox ID="txt" runat="server" Style="position: static"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Style="position: static" Text="Button" OnClick="Button1_Click" PostBackUrl="TargetPage.aspx" />
</form>
//TargetPage.aspx.cs页面的C#代码如下:(注意PreviousPage.FindControl方法)
protected void Page_Load(object sender, EventArgs e)
{
TextBox tb = (TextBox)PreviousPage.FindControl("txt");
Response.Write(tb.Text);
}
这样就可以在TargetPage.aspx页面取得SourcePage.aspx页面中的数据了。
2.使用@PreviousPageType,访问源页面中页面类的属性(Property)和方法(Method):
有两个页面:SourcePage.aspx和TargetPage.aspx
//SourcePage.aspx页面的HTML源代码如下:(请注意按钮的PostBackUrl属性)
<form id="form1" runat="server">
<asp:TextBox ID="txt" runat="server" Style="position: static"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Style="position: static" Text="Button" OnClick="Button1_Click" PostBackUrl="TargetPage.aspx" />
</form>
//SourcePage.aspx 页面的C#源代码如下:
public partial class SourcePage : System.Web.UI.Page
{
public string Name
{
get
{
return "GrayWorm";
}
}
public string show()
{
return "defafult12.show()";
}
}
//TargetPage.aspx页面的HTML源代码中加入如下的声明行:
<%@ PreviousPageType VirtualPath="~/Default12.aspx" %>
//TargetPage.aspx.cs页面的C#源代码如下:
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(PreviousPage.Name);
Response.Write(PreviousPage.show());
}
3.使用@Reference,访问源页面中的内容
//SourcePage.aspx 页面的HTML源代码如下: (请注意按钮的PostBackUrl属性)
<form id="form1" runat="server">
<asp:TextBox ID="txt" runat="server" Style="position: static"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Style="position: static" Text="Button" OnClick="Button1_Click" PostBackUrl="default13.aspx" />
</form>
//SourcePage.aspx页面的C#源代码如下:
public partial class SourcePage : System.Web.UI.Page
{
public string Name
{
get
{
return "GrayWorm";
}
}
public string show()
{
return "defafult12.show()";
}
}
//TargetPage.aspx页面的HTML源代码中,加入下面的声明行:
<%@ Reference VirtualPath="~/Default12.aspx" %>
//TargetPage.aspx.cs页面的C#源代码如下:
if (PreviousPage != null)
{
if (IsCrossPagePostBack)
{
Default12 d = (Default12)PreviousPage;
string s = ((TextBox)d.FindControl("txt")).Text;
Response.Write(s);
Response.Write(d.Name);
Response.Write(d.show());
}
}
七、客户端功能:
1.默认提交按钮与默认焦点设置:
<form id="form1" runat="server" defaultbutton="Button1" defaultfocus="txt">
<asp:TextBox ID="txt" runat="server" ></asp:TextBox>
<asp:TextBox ID="TextBox1" runat="server" ></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="Button" />
</form>
defaultbutton属性:设置当前表单的默认提交按钮,当按回车键的时候默认触发该按钮的事件
defaultfocus属性:设置默认焦点的控件的id
2.设置Web窗体控件的客户的click事件:
在asp.net1.1中,web窗体控件属性中有一个OnClick事件,但这个OnClick事件调用的是aspx.cs后置类的服务器端的方法名称。而不是客户端JavaScript函数的名称。为了实现Web窗体控件能够调用到客户端的JavaScript函数,我们只好在Page_Load事件中给按钮对象的Attributes集合添加客户端代码,实在是麻烦又难以理解。
到了asp.net2.0中我们惊喜地发现了一个新事件--OnClientClick事件。这个事件就是Web窗体控件调用的客户端代码用到的事件,用起来就像HTML控件调用客户端代码一样。
<asp:Button ID="Button2" runat="server" Text="Button" OnClientClick="window.alert('hello world')" />
<asp:Button ID="Button3" runat="server" Text="Button" OnClientClick="return showclientwindow()" />
<script language=javascript>
function showclientwindow()
{
return window.confirm("Are you ready?");
}
</script>
3. 动态注册客户端的JavaScript脚本:
在不同位置注册的脚本作用有什么不同,这里不多说了。 在asp.net2.0中注册脚本用的是Page.ClientScript对象,Page.ClientScript对象是ClientScriptManager类的实例。
动态注册的客户端脚本常用的有四类:
a.在<Head>标记内注册脚本 (需要在按钮的属性中设置OnClientClick="show()" )
string script = "<script language='javascript'>function show(){window.alert('hello world');}</script>";
if (!Page.ClientScript.IsClientScriptBlockRegistered("testshow"))
{
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "testshow", script);
}
b.在<body>末尾注册脚本 (需要在按钮的属性中设置OnClientClick="show()" )
string script = "<script language='javascript'>function show(){window.alert('hello world');}</script>";
if (!Page.ClientScript.IsStartupScriptRegistered("testshow"))
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "testshow", script);
}
c.在<Head>标记内注册JS链接文件 (需要在按钮的属性中设置OnClientClick="show()" )
string script = "<script language='javascript'>function show(){window.alert('hello world');}</script>";
if (!Page.ClientScript.IsClientScriptIncludeRegistered("testshow"))
{
Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "testshow", "js.js");
}
d.在<body>内注册提交脚本 (无需在按钮的属性中设置OnClientClick="show()" )
string script = "window.alert('Are you sure to submit?')";
if (!Page.ClientScript.IsOnSubmitStatementRegistered("testshohw"))
{
Page.ClientScript.RegisterOnSubmitStatement(this.GetType(), "testshow", script);
}
(车延禄)http://hi.baidu.com/grayworm/blog/item/b550da5266f4360d0df3e3e6.html
come from = http://blog.sjzj.com.cn/article.asp?id=896
string StartupPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Startup);
System.IO.File.Copy("應用程式路徑(包括程式名)", StartupPath + "執行程式檔案名稱", true); //獲得檔的當前路徑
string dir = Directory.GetCurrentDirectory();
//獲取可執行檔的全部路徑
string exeDir = dir + "\\WindowsApplication1.exe";
//獲取Run鍵
RegistryKey key1=Registry.LocalMachine;
RegistryKey key2=key1.CreateSubKey("SOFTWARE");
RegistryKey key3=key2.CreateSubKey("Microsoft");
RegistryKey key4=key3.CreateSubKey("Windows");
RegistryKey key5=key4.CreateSubKey("CurrentVersion");
RegistryKey key6=key5.CreateSubKey("Run");
//在Run鍵中寫入一個新的鍵值
key6.SetValue("myForm",exeDir);
key6.Close();
//如果要取消的話就將key6.SetValue("myForm",exeDir);改成
//key6.SetValue("myForm",false);
建立可开机光盘,并支持 BIN 及 ISO 的格式转换。Name:crsky
Code:SxyqK89s0eTxxiSPbIUijK8Lrhbhggdaukff