第一步:做网站首先开始就要设置IIS吧,没这个做好之后都不知可不可以用了!
在XP上装个IIS 5.1,设好主目录后就用VS2005做个Default.apsx打算试一下可用否,但....出错了,果然万事起头难啊!
报"HTTP 500 内部服务错误",google后将IE的"显示友好 HTTP 错误信息"关闭,得到进一步的错误为"server application error",再次拿起法宝-google,得出要按以下顺序做:
1、检查你的DTC服务(全名:Distributed Transaction Coordinator)是否可以正常启动。
2、如果出错(刚好我的就是出错)
在CMD下执行以下命令:
cd %windir%/system32/inetsrv
rundll32 wamreg.dll, CreateIISPackage
regsvr32 asptxn.dll
但我照做到第二步出现了“rundll32 wamreg.dll, CreateIISPackage 丢失条目”,无法了,再次google发现原来CreateIISPackage是区分大小写的(看来我的习惯不好啊,以后就要用C#写程序了,这可怎么办呢),而且wamreg.dll,后一定要用个空格--!。一翻折腾后,终于可以正常访问ASPX文件了,天啊这第一步难度就不少了。。。。
第二步:数据连接。
在网站中要使用数据库呢,而且Access及Sql都要用到,先连接个Access的吧
- string strConnection = "Provider=MicroSoft.Jet.OleDb.4.0;" ;
- strConnection += @ "Data Source=" +strFileName+@ ";User ID=admin;Password=;" ;
- strConnection += @ "Jet OLEDB:Database Password=123" ;
- string queryString = "select * from JxcCon" ;
- OleDbConnection myObjConnection = new OleDbConnection(strConnection);
- OleDbDataAdapter adapter = new OleDbDataAdapter(queryString, myObjConnection );
其中那个strFileName是在FileUpload.PostedFile.FileName中得到的!
上面的方法似乎不方便也不太安全,所以将那个连接密码放到web.config中
在web.config中加入:
建立连接的语句改为:
- < appSettings >
- < add key = "accessProviderConnectPWS" value = "123" />
- </ appSettings >
但生成时会提示:“System.Configuration.ConfigurationSettings.AppSettings”已过时:“This method is obsolete, it has been replaced by System.Configuration!System.Configuration.ConfigurationManager.AppSettings”的警告,大意就是说那个ConfigurationSettings已被ConfigurationManager所代替了,但可能由于那个是新加入的功能吧,如果直接用using System.Configuration后就使用ConfigurationManager是会报错的,一定要在解决方案中按右键-》添加引用-》“System.Configuration.dll”才会正常。
- string strConnection = string .Format( "Provider=MicroSoft.Jet.OleDb.4.0;Data Source={0};User ID=admin;Password=;Jet OLEDB:Database Password={1}"
- , strFileName, ConfigurationSettings.AppSettings[ "accessProviderConnectPWS" ]);
- OleDbConnection myObjConnection = new OleDbConnection(strConnection);
但如果不止一个页面要使用Access数据库连接的话,每次都要写上面的连接语句太烦锁了,做个连接的类吧。
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Text;
- using System.Data.OleDb;
- namespace MyClassSum
- {
- public class AccessConnect
- {
- public static OleDbConnection strConnection( string strFileName)
- {
- string strConnection = "Provider=MicroSoft.Jet.OleDb.4.0;" ;
- strConnection += @ "Data Source=" +strFileName+@ ";User ID=admin;Password=;" ;
- strConnection += @ "Jet OLEDB:Database Password=123" ;
- return new OleDbConnection(strConnection);
- }
- }
- }
上面的页面代码变为:
- OleDbConnection myObjConnection = MyClassSum.AccessConnect.strConnection(strFileName);
在web.config上的<appSettings>....</appSettings>里面的内容就不需要了。
另外,数据连接打开后要及时关闭,如:myObjConnection.Close();如果使用DataAdapter的话,在连接未打开前它会自动打开,使用完毕后会自动关闭,但如果连接本来就是开着的,那DataAdapter使用完连接后并不会自动关闭,其他的比如DataReader则要手动打开和关闭数据连接。
第三步:使用cookie
建立
- HttpCookie myCookie = new HttpCookie( "Jxc" );
- myCookie[ "AccessDataLocate" ] = Page.Server.UrlEncode(fileName);
- myCookie[ "CookieIdentity" ] = Page.Server.UrlEncode(cookieIdentity);
- myCookie.Expires = DateTime.Today.AddYears(10);
- Response.Cookies.Add(myCookie);
为什么要使用Page.Server.UrlEecode转换一下?因为要防止fileName中包含中文而引起乱码,读出值的时候要亦要使用Page.Server.UrlDecode()转换过来。
读取
- HttpCookie myCookies = Request.Cookies[ "Jxc" ];
- if (myCookies != null )
- {
- string strAccessDataLocate=Page.Server.UrlDecode(Request.Cookies[ "Jxc" ][ "AccessDataLocate" ]);
- string strCookieIdeneity = Page.Server.UrlDecode(Request.Cookies[ "Jxc" ][ "CookieIdentity" ]);
- string strDisp = "" ;
- strDisp = string .Format( "AccessDataLocate键的值为:{0},CookieIdentity键的值为: {1}" , strAccessDataLocate, strCookieIdeneity);
- Response.Write(strDisp);
- }
删除
- if (Request.Cookies[ "Jxc" ] != null )
- {
- HttpCookie myCookies = new HttpCookie( "Jxc" );
- myCookies.Expires = DateTime.Now.AddMilliseconds(-1);
- //或my Cookie.Expires = DateTime.MinValue
- Response.Cookies.Add(myCookies);
- }