vs2005 win7未将对象引用设置为对象实例 access数据源文件

Socut.Data - ASP.Net(C#)数据库组件,Access/SQL Server访问控件
烁空数据库双向切换组件(Socut.Data.dll)让您只需手写传统工作的20%代码便可安全、高效率开发如论坛,商城,博客等系统。
经网友的要求,Socut.Data
V4.0发布!
支持Access与SQL Server双向切换的数据库组件!
VS 2005版本 []
VS 2008版本 []
QQ交流群:
1. 最新版4.0与以往版本使用方法并不一样
如果你不懂使用,请 (VS2005版本)
3. 务必仔细查看示例中的web.config文件的设置
4. 强烈建议大家使用“参数化查询”操作数据库
这个组件现在是完全免费的,如果觉得好用,就介绍给你的朋友,或在你的主页加上本站链接()。因时间关系,这个页比较简单,等以后我有时间了,会增加一些内容。或者,哪个网友设计能力好点的,又比较热心的,可以做个界面给我,我的邮箱是 zsqv (届时会在此页加上热心者的名字)
郑少强 【】
错误⑴至少一个参数没有被指定值
原因有两种,一是列名错误;二是列为文本类型却在单纯的SQL语句中却没有使用'符(或是ID值本身为数字型,则使用了'符)
错误⑵操作必须使用一个可更新的查询
这个错误一般只有在使用ACCESS数据库时才会出现。因为ACCESS在打开时会生成一个临时文件.ldb,这时文件夹如果没有写入权限时,则会发生错误。
解决方法如下:
①如果你的系统是Win2003,则要在你网站目录处右击“属性”-&“安全”-&添加-&输入“Everyone”,并给其完全控制的权限才能正常使用。
②如果你的系统是WinXP,这个问题一般发生在磁盘格式为NTFS的情况下。点击“工具”-&“文件夹选项”-&“查看”,找到“使用简单文件共享(推荐)”这项,把前面的勾去掉。
在网站所在文件夹上单击右键,选择“属性”,这时就能找到“安全”的选项卡,添加一个用户Everyone,权限设为“完全控制”。
错误⑶找不到可安装的ISAM。
数据库不存在所导致的,请检查数据库路径是否设置正确。
错误⑷使用统计功能ExecuteScalar出现“未将对象引用设置到对象的实例。”的错误
这种情况最常见的原因是因为你将 SELECT COUNT(*) FROM 写成了 SELECT * FROM
错误⑸语法错误 (操作符丢失) 在查询表达式 &abc'123&中。
这种情况一般是由于采用构造SQL语句,并且使用'符造成的。只要在插入数据库前把'符用Replace(&'&,&[SocutDot]&)替换即可解决。强烈建议使用参数化查询,就不会存在这样的问题,且安全性高。
/jieyitong/asp.net下配置数据源时出现: 未将对象引用设置到对象的实例。
asp.net下配置数据源时出现: 未将对象引用设置到对象的实例。
打开vs2005或vs2008,& 新建网站,把ACCCESS数据库Copy到App_Data里,& 拖"AccessDataSource"到窗口里,& 配置数据源。。。& 选择数据库& 下一步& sql语句里是空的,点“查询生成器...”& 弹出:& ---------------------------& Microsoft&Visual&Studio& ---------------------------& 未将对象引用设置到对象的实例。& ---------------------------& 确定&& ---------------------------& 如果我不点“查询生成器...”,而是直接写上SQL语句,下一步,完成,拖一GridView&绑定上面的AccessDataSource1,可以正常运行。 -------------------------------------------------------------------------------- 各种方法都试了,不成,然后把系统的所有服务都设为自动,然后启动,cmd半天,再试,OK了,这么看来是系统哪个服务我给关了,然后再还原系统发现没有动服务的情况下,也正常了,不知为佑因,如知情者,请指教。& 我感觉可能是系统第一次运行得要哪些服务,然后以后不用了,而我阻止了他第一次运行时的服务,所以没成功。
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
港口与航道工程建设工程法规及相关知识建设工程经济考试大纲矿业工程市政公用工程通信与广电工程
操作系统汇编语言计算机系统结构人工智能数据库系统微机与接口
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
Powerpoint教程WPS教程
电子政务客户关系管理首席信息官办公自动化大数据
职称考试题目
就业指导签约违约职业测评
招生信息考研政治
网络安全安全设置工具使用手机安全
3DMax教程Flash教程CorelDraw教程Director教程
Dreamwaver教程HTML教程网站策划网站运营Frontpage教程
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
互联网电信IT业界IT生活
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
组织运营财务资本
视频播放文件压缩杀毒软件输入法微博
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&posts - 197,&
comments - 48,&
trackbacks - 0
vs2005调试问题及解决方案锦集==============================================================================================
1.检测到有潜在危险的 Request.Form 值2.&在没有任何数据时进行无效的读取尝试&解决办法3.数据为空。不能对空值调用此方法或属性。4.阅读器关闭时 FieldCount 的尝试无效5.未能映射路径6.Unreachable code detected7.索引超出范围。必须为非负值并小于集合大小8.数据为空。不能对空值调用此方法或属性9.数据源不支持服务器端的数据分页10.对象名'***** '无效11.在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序,error: 40 - 无法打开到 SQL Server 的连接)12.SqlDateTime 溢出。必须介于 1/1/:00 AM 和 12/31/:59 PM之间。13.出现-------表示&属性&,此处应为&方法&14.未能从程序集&DAL, Version=1.0.0.0, Culture=neutral,PublicKeyToken=null&中加载类型&DAL.SqlHelper&。15.为过程或函数 指定的参数太多16.无法启动调试,绑定句柄无效17.Unable to debugging on the web server.Debug failed because integrated windows authentication is not enable18.Automation 操作中文件名或类名未找到: 'RegExp'19.System.NullReferenceException: 未将对象引用设置到对象的实例。20.错误 1718。文件被数字签名策略拒绝(安装vs2005sp1时)21.vs2005不能从源文件模式切换到视图模式22.Validation of viewstate MAC failed23.Automation server can't create object"(Automation 服务器不能创建对)24.包加载失败25.Error spawning 'cmd.exe'.26.尝试读取或写入受保护的内存27.无法在证书存储区中找到清单签名证书28.该项目中不存在目标&ResolveKeySource&。29.不能将值 NULL 插入列 '**'30.未能加载类型"命名空间.类"...31.不能访问只读文件&****.***"32.请求因 HTTP 状态 401 失败:Access Denied
1.检测到有潜在危险的 Request.Form 值原因:  (1)在提交数据的页面或webconfig中没有对validateRequest的属性进行正确的设置  (2)HTML里面写了两个 引起解决:  方案一: 在.aspx文件头中加入这句:   方案二: 修改web.config文件: 以下是引用片段:&configuration&&system.web& &pages validateRequest="false" /& &/system.web& &/configuration&&   因为validateRequest默认值为true。只要设为false即可。
2.&在没有任何数据时进行无效的读取尝试&解决办法原因:  所返回的sqldatareader无数据记录,但没有作记录判断力处理。返回的是空值  加上判断即可: if (reader.read()) { TextName.Text = reader["FieldName"].ToString(); }
3.数据为空。不能对空值调用此方法或属性。原因:  若对象是null,那么调用对象的方法例如ToString()肯定出错一般是数据库字段的值为空  在grideview等数据控件常出现解决:因此建议作NULL处理
4.阅读器关闭时 FieldCount 的尝试无效原因:  使用了SqlDataReader来绑定数据后,将connection对象作了Close()处理  类似以下是引用片段:public SqlDataReader&& GetSomething(){&& conn.open(); SqlDataReader&& reader = sqlcmd.ExcecutReader(CommandBehavior.CloseConnection)); conn.close();// occur error&& here&& return&&&& }&   在绑定的时候调用了这个方法来指定数据源。如果使用这个方法则需要在调用函数中关闭Reader这样conn就可以自动关闭。  如果是使用的是SqlDataAdapter和DataSet那么请去掉显式关闭conn的调用。或者在finally中调用之。
5.未能映射路径原因:可能是在webconfig中的路径配置不正确所致以下是引用片段:&add key="FCKeditor:BasePath" value="~/admin/fckeditor/"/&&add key="FCKeditor:UserFilesPath" value="/UserFiles/" /&
6.Unreachable code detected原因:  一般是在异常处理理或返回值时使用了 throw 或return ,可能是其位置放在前面,造成后面的代码执行到了。解决:  把相关的异常抛出处理的语句(throw)或return 的语句放到代理执行的最后一行。
7.索引超出范围。必须为非负值并小于集合大小原因:  (1).没有设置DATAKEYFIELD设为数据库中相对应的唯一字段(一般是主键)  (2).DataGrid1.Columns & e.Item.Cells解决:  (1).设置datakeyfield  (2).加入判断语句datagrid1.item.count (datagrid可以是其它相类似的服务器控件)
8.数据为空。不能对空值调用此方法或属性
9.数据源不支持服务器端的数据分页解决方法:  不要使用DataReader,改成使用DataSet:或使用自定义分页形式,不采用vs.net提供的分页功能以下是引用片段:  OleDbDataAdapter da = new OleDbDataAdapter(sql, connection);   DataSet ds2 = new DataSet();   da.Fill(ds2, "News");   GridView1.DataSource = ds2;   GridView1.DataBind();
10.对象名'***** '无效原因:当前使用的数据库中没有*****这张表解决: 查看是否程序中是否写错了所调用的表的名称或看一下SQL数据库中是否存在你所调用的表
11.在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序,error: 40 - 无法打开到 SQL Server 的连接)解决: 主机上需要用固定的IP地址或服务器地址
12.SqlDateTime 溢出。必须介于 1/1/:00 AM 和 12/31/:59 PM之间。出现这种问题``多半是因为你更新数据库时``datetime字段值为空``默认插入日``造成datetime类型溢出
13.出现-------表示&属性&,此处应为&方法&原因:  1.VB与c#的方法,属性的格式有所不一样导致。  2.可能是在design中绑定数据的语法出现错误 解决: 1.记住属性用[] 方法用()  3.记住绑定数据的正确语法(有以下几种方式:: 等)
14.未能从程序集&DAL, Version=1.0.0.0, Culture=neutral,PublicKeyToken=null&中加载类型&DAL.SqlHelper&。原因:修改了其他层后未能重新编译成dll解决:编译一下(Rebuild)
15.为过程或函数 指定的参数太多原因:调用存储过程与定义的存储过程所用的参数数量或所执行的SQL语句中所传入的参数个数不一致(这是个SQL的错误)解决方案:仔细检查在存储过程中所设定的参数变量,与实际输入的参数值是否一一对应
16.无法启动调试,绑定句柄无效原因:系统的Terminal Services没有开启
17.Unable to debugging on the web server.Debug failed because integrated windows authentication is not enable解决方法:打开vs2005-&工具(Tools)-&选项(Option)-&调试(debugging)-&编辑并继续(Edit and Continue)-&全部打勾
18.Automation 操作中文件名或类名未找到: 'RegExp'解决方法:regsvr32 vbscript.dll
19.System.NullReferenceException: 未将对象引用设置到对象的实例。原因:  (1)所设置的变量为空值或没有取到值,一般出现在传递参数的时候出现这个问题,也会在使用datagrid或gridview或datalist等数据控件时出现.  (2)控件名称与codebehind里面的没有对应  (3)未用new初始化对象  (4)在程序中所引用的控件不存在解决方法:  (1)使用try..catch...finally捕捉错误,或直接用response.write()输出所取的变量值  (2)查看代码中是否存在未初始化的变量
20.错误 1718。文件被数字签名策略拒绝(安装vs2005sp1时)解决方法:  (1). 单击&开始&,单击&运行&,键入 control admintools,然后单击&确定&。  (2). 双击&本地安全策略&。  (3). 单击&软件限制策略&。(注意:如果未列出软件限制,请右击&软件限制策略&,然后单击&新建策略&。 )  (4). 在&对象类型&下,双击&强制&。  (5). 单击&除本地管理员以外的所有用户&,然后单击&确定&。  (6). 重新启动计算机。微软说明:  
21.vs2005不能从源文件模式切换到视图模式解决方法:dos下运行下 devenv /resetskippkgs (win+r cmd)
22.Validation of viewstate MAC failed解决办法:页面的顶部page加 EnableViewState="False" EnableViewStateMac = "False" 来解决这个问题
23.Automation server can't create object"(Automation 服务器不能创建对)解决办法:运行: Regsvr32 scrrun.dll 即可。
24.包加载失败 未能正确加载包"Visual Web Developer Trident Designer Package"(GUID ={30AE7E28-6C02-496D-8E43-85F7A90AEFF1}。解决方法:  1、设置系统变量 VsLogActivity=1  2、在%APPDATA%\Microsoft\VisualStudio\8.0\文件夹下创建文件ActivityLog.xml  Error  Microsoft Visual Studio  LoadLibrary failed for package [Visual Web Developer Trident Designer Package]  {30AE7E2B-6C02-496D-8E43-85F7A90AEFF1}  --------------------------------------------------------------------------------  8007007e  c:\Program Files\Microsoft Visual Studio 8\Common7\Packages\tridsn.dll  3、从 WINNT\MicroSoft.NET\Framework\v2.0.xxx 复制文件gdiplus.dll 到 Program Files\Visual Studio 8\Common7\Packages文件夹下  4、在命令行下运行命令 :devenv /resetskippkgs
25.Error spawning 'cmd.exe'.解决方案:把cmd.exe 拷贝到VS安装目录下的VC/BIN目录里,可以解决问题。
26.尝试读取或写入受保护的内存解决:硬件有问题,一般内存有问题
27.无法在证书存储区中找到清单签名证书解决方法:用记事本打开项目的.csproj文件,删除类似
28.该项目中不存在目标&ResolveKeySource&。原因:这个问题很罕见,查询国外相关资料后,大致说是由于部署的不是一个标准的solution, 需要在VS自带的命令提示中运行下面这个东西恢复解决方法:  (1).将下列代码存为XML文件,命名为TestBuild.xml以下是引用片段:&Project DefaultTargets="Build" xmlns=""&&&&&& &PropertyGroup&&&&&&&&&&&& &TargetConnectionString&Data Source=.\sql2005%3BUser ID=SqlUser%3BPooling=False%3BPassword=X&/TargetConnectionString&&&&&& &/PropertyGroup&&&&&& &ItemGroup&&&&&&&&&&&& &DatabaseProject Include="Database1\Database1.dbproj"/&&&&&&&&&&&& &DatabaseProject Include="Database2\Database2.dbproj"/&&&&&& &/ItemGroup&&&&&& &Target Name="BuildAllDatabaseProjects"&&&&&&&&&&&& &MSBuild&&&&&&&&&&& Properties="TargetConnectionString=$(TargetConnectionString)" &&&&&&&&&&& Projects="@(DatabaseProject)"&&&&&&&&&&& Targets="BDeploy"&&&&&&&&&&&& &/MSBuild&&&&&& &/Target&  (2)在命令提示中运行:msbuild /t:BuildAllDatabaseProjects TestBuild.xml
29.不能将值 NULL 插入列 '**'原因:这是数据库表设计的错误,所涉及的表的字段中设置了不能为空的属性,但是传入的值为null,所以报错解决方法:查看是否所传入的值是否为Null,或修改数据库中表的所对应的列的属性
30.未能加载类型"命名空间.类"...原因:  (1)项目修改后没有进行编译  (2)项目中原有的命名空间可能被修改了  (3)项目中所需要的ascx或其他页面不存在,或不包含在项目中解决方法:  (1)在修改完成之后,请重新生成或编译整个项目或解决方案  (2)手工修改所改动的命名空间,注意名称的大小写,再重新编译  (3)将相关的文件包含在项目中
31.不能访问只读文件&****.***"解决方案:&给虚拟目录所对应的文件加上&Everyone/写入&权限即可
32.请求因 HTTP 状态 401 失败:Access Denied解决方法:在iis信息服务器上把匿名访问和允许iis控制密码给勾上
============================================================================
VS2005调试技巧集合
下面有从浅入深的6个问题,您可以尝试回答一下
1、一个如下的语句for (int i = 0; i & 10; i++){if (i == 5)j = 5;},什么都写在一行,你怎么在j=5前面插入断点 2、在一个1000次的循环体内部设置断点,你希望当循环进行到900次后中断,怎么才能做到呢? 3、你有一个表达式在上面循环的某一次发生了变化,你想知道是哪一次,在哪个地方,怎么才能做到? 4、你希望你的断点在被命中100次后,每命中三次中断一次,比如第103,第106,第109怎样做? 5、你有在调试一个服务程序,希望在其内部打上了断点,可是,由于这是一个公用的服务你不希望其他访问这个服务的程序被你的调试所干扰,你想怎么办? 6、怎样知道2个断点中断的时间间隔
问题1:例如如下循环for(int i=0;i&1000;i++){doSomeThing......}&在循环的大括号上单击右键,插入断点,用这个方法,可以对付那些喜欢把语句写在一行上的家伙,其实,随着.Net3.5中Linq的出现,我们肯定也会经常在在一行上写复杂的表达式,这个时候用这种插入方法会比较管用
问题2:&编辑这个断点的条件,在断点上右键单击,选择&条件&,在弹出的窗口中可以设置断点命中的条件& i=900注意我是在调试C#代码,默认的条件语句语法是C#,如果你想切换,那就需要用Ctrl-B,来插入断点,并在弹出窗口中选择语言
问题3:&同样通过设置条件断点我们还可以解决我们的问题3,对表达式变化的跟踪string user="yizhu2000"for(int i=0;i&10000;i++){DoSomething1().......DoSomethingN()}&当循环执行完毕时我们发现user变成了"smart_boy",你不知道这个值是在第几次循环的时候变化的,那么你是不是会选择打上断点,一次一次中断,来查看呢?当然不用&在循环体结束的位置我们设置一个断点,打开条件编辑窗口(打开方法同上),设置表达式为user,勾选下面的HasChanged,也就是说,你告诉断点,当user的值发生变化时才触发。&(注意:第一次执行到断点的时候,程序一定会中断,并计算这时表达式的值,所以,所谓发生变化,指的是以后执行到断点是表达式的值和第一次执行到断点时表达式的值的比较)
问题4:如何让断点在指定的命中次数或者大于某个次数时触发呢?方法是设定几个断点的&命中次数&,右键单击断点,在弹出菜单中选择&命中次数&,会弹出如下窗口在"命中断点时"下拉列表里,我们可以看到四个选项
break always:总是中断break when the hit count is equal to:中断,等于某次数时中断beak when the hit count is a multpile of:中断,当次数是某数的倍数时中断break when the hit count is greater than or equal to:中断,当大于等于某数时中断
问题5:&解决方法是利用断点的&筛选器&功能,比如我希望断点只有被机器名为yizhu的机器访问才能触发,我可以这样设置&当其他机器访问程序的时候,断点将不会触发,这样做的优点是通过设置机器名,我们可以让其他机器访问的时候感觉不到断点的存在,除此之外我们可以设 置机器名,进程号,进程名,线程号,线程名作为filter,而且还可以把他们组合起来,比如我希望通过当机器yizhu的dllhost进程调用时才触 发,那么问题就可以设置为MachineName="yizhu"&ProcessName="dllhost"
问题6:&在程序性能调试的时候,我们经常需要知道某段代码的执行效率,一般来说,我们可以在程序中加入时间点,通过时间点相减来取得时间间隔,这种方法有个 显而易见的缺点就是需要修改程序,想要不修改程序,就需要借助一些工具,那么有没有什么方法可以声明式的插入时间点,并计算值呢?其实断点完全可以做到&在给出方法前,我们来看看断点的另外一个设置项,&命中条件&,这个选项可以让我们在命中断点后做一些事情,包括输出一些内容,或者调用宏,比如输出一个程序中变量的值。&the value of user is {user}&&我们输出了变量user的值,下面Continue Execution表示程序不会中断,输出后继续执行,注意表达式需要用{}括起来,,其他的部分会被作为字符串输出。设定WhenHit后断点变成了方形(看厌了圆断点,我还挺喜欢这个方家伙的)在output中查看输出结果.&既然可以计算表达式,我们的第一个最简方案就出来了,也就是在程序执行到断点的时候,输出DateTime.Now,这样当然是可行的,但是我们需 要的是时间间隔,所以我们还需要自己来算个减法,还是挺麻烦的,怎么样才能让程序自己输出时间间隔呢?有一个想法是这样的,我们在上一个断点声明一个时间 变量,然后在下面的断点里用DataTime.Now减去这个变量,即
断点一的条件:{DateTime _t=DateTime.N}断点二的条件:{DateTime.Now-t;}看起来不错,但是实际运行时就有问题了,让我们看看输出吧
&上面高亮的部分说,变量申明只能在immediate window中进行,所以断点一的变量没有申明成功,关于immediatewindow,我们以后会涉猎到,反正就是说想在表达式里申明变量,没门,死路一条.那么我们怎么才能不申明变量又时间点呢?&这时我想起了Thread.SetData 方法,这个方法可以往当前线程专门提供的空间中插入一些数据,并且可以通过GetData得到数据,具体细节参考于是方案就有了,在第一个断点处把时间放入Thread的DataSlot,然后第二个断点取出来相减
断点一的条件:{Thread.SetData(Thread.GetNamedDataSlot("ExecutionTime"),DateTime.Now);}断点二的条件:{DateTime.Now-(DateTime)System.Threading.Thread.GetData(System.Threading.Thread.GetNamedDataSlot("ExecutionTime"));}看看输出效果&我们的目的已经达到了,output中成功的输出了时间间隔,当然,还不是很完善,首先,这个方法限于两个断点,你想多打几个断点,测试两两间的间隔还是比较麻烦.测量精度也可以提高,大家有兴趣可以自己研究这个方法的扩展
将截断字符串或二进制数据。语句已终止。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.Data.SqlClient.SqlException: 将截断字符串或二进制数据。语句已终止。
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
原因及解决方法:要输入的内容超过了该数据库字段的长度所致,需要调整数据库字段长度。
例如:[info]字段(新闻内容,长字符串)设置为 nchar(30)时出现上述错误,改为 ntext 后问题解决。
阅读(...) 评论()vs2005 “GenerateResource”任务意外失败。 System.NullReferenceException: 未将对象引用设置到对象的实_百度知道我的工作問題集(VS2005)
我的工作問題集(VS2005)
21.如何將組織好的string變量匯出成Excel文檔?
protected void ToExcel()
&&&& string sStr="";
&&&& /*省略組織sStr的代碼*/
&&&& Response.Clear();
&&& Response.AppendHeader("Content-Disposition", "filename=TEST" + DateTime.Now.Date.ToString("yyyyMMdd") + ".xls");
&&& Response.ContentType = "application/vnd.ms-excel";
&&& Response.ContentEncoding = Encoding.D
&&& Response.Write(sStr);
&&& Response.Flush();
&&& Response.Close();
22.我正在學習中的Delegate(轉載)
delegate是C#中的一种类型,它实际上是一个能够持有对某个方法的引用的类。与其它的类不同,delegate类能够拥有一个签名(signature),并且它只能持有与它的签名相匹配的方法的引用。它所实现的功能与C/C++中的函数指针十分相似。它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能够调用这个方法m。但与函数指针相比,delegate有许多函数指针不具备的优点。首先,函数指针只能指向静态函数,而delegate既可以引用静态函数,又可以引用非静态成员函数。在引用非静态成员函数时,delegate不但保存了对此函数入口指针的引用,而且还保存了调用此函数的类实例的引用。其次,与函数指针相比,delegate是面向对象、类型安全、可靠的受控(managed)对象。也就是说,runtime能够保证delegate指向一个有效的方法,你无须担心delegate会指向无效地址或者越界地址。
实现一个delegate是很简单的,通过以下3个步骤即可实现一个delegate:
1.声明一个delegate对象,它应当与你想要传递的方法具有相同的参数和返回值类型。
2. 创建delegate对象,并将你想要传递的函数作为参数传入。
3. 在要实现异步调用的地方,通过上一步创建的对象来调用方法。
public class MyDelegateTest
&&&&&&& // 步骤1,声明delegate对象
&&&&&&& public delegate void MyDelegate(string name);
&&&&&&& // 这是我们欲传递的方法,它与MyDelegate具有相同的参数和返回值类型
&&&&&&& public static void MyDelegateFunc(string name)
&&&&&&&&&&&&&&&&& Console.WriteLine("Hello, ", name);
&&&&&&& public static void Main()
&&&&&&&&&&&&&&&&& // 步骤2,创建delegate对象
&MyDelegate md = new MyDelegate(MyDelegateTest.MyDelegateFunc);
&&&&&&&&&&&&&&&& // 步骤3,调用delegate
&&&&&&&&&&&&&&&& md("sam1111");
输出结果是:Hello, sam1111
了解了delegate,下面我们来看看,在C#中对事件是如何处理的。
C#中的事件处理实际上是一种具有特殊签名的delegate,象下面这个样子:
public delegate void MyEventHandler(object sender, MyEventArgs e);
其中的两个参数,sender代表事件发送者,e是事件参数类。MyEventArgs类用来包含与事件相关的数据,所有的事件参数类都必须从System.EventArgs类派生。当然,如果你的事件不含参数,那么可以直接用System.EventArgs类作为参数。
就是这么简单,结合delegate的实现,我们可以将自定义事件的实现归结为以下几步:
1.定义delegate对象类型,它有两个参数,第一个参数是事件发送者对象,第二个参数是事件参数类对象。
2.定义事件参数类,此类应当从System.EventArgs类派生。如果事件不带参数,这一步可以省略。
3.定义事件处理方法,它应当与delegate对象具有相同的参数和返回值类型。
4. 用event关键字定义事件对象,它同时也是一个delegate对象。
5.用+=操作符添加事件到事件队列中(-=操作符能够将事件从队列中删除)。
6.在需要触发事件的地方用调用delegate的方式写事件触发方法。一般来说,此方法应为protected访问限制,既不能以public方式调用,但可以被子类继承。名字是OnEventName。
7. 在适当的地方调用事件触发方法触发事件。
下面是一个简单的例子:
public class EventTest
&&&&&&& // 步骤1,定义delegate对象
&&&&&&&public delegate void MyEventHandler(object sender, System.EventArgs e);
&&&&&& // 步骤2省略
&&&&&&&public class MyEventCls
&&&&&&&&&&&&&&& // 步骤3,定义事件处理方法,它与delegate对象具有相同的参数和返回值类// 型
&&&&&&&&&&&&&&& public& void MyEventFunc(object sender, System.EventArgs e)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&& Console.WriteLine("My event is ok!");
&&&&&&&&&&&&&&&&}
&&&&&& // 步骤4,用event关键字定义事件对象
&&&&&&private event MyEventH
&&&&& private MyEventC
&&&&& public EventTest()
&&&&&&&&&&&&&&& myecls = new MyEventCls();
&&&&&&&&&&:&&&&& // 步骤5,用+=操作符将事件添加到队列中
&&&&&&&&&&&&&&& this.myevent += new MyEventHandler(myecls.MyEventFunc);
&&&&& // 步骤6,以调用delegate的方式写事件触发函数
&&&&&protected void OnMyEvent(System.EventArgs e)
&&&&&&&&&&&&&&&if(myevent != null)
&&&&&&&&&&&&&&&&&&&&&& myevent(this, e);
&&&& public void RaiseEvent()
&&&&&&&&&&&&&& EventArgs e = new EventArgs();
&&&&&&:&&&&&&&& // 步骤7,触发事件
&&&&&&&&&&&&&& OnMyEvent(e);
&&&&& public static void Main()
&&&&&&&&&&&&&& EventTest et = new EventTest();
&&&&&&&&&&&&&& Console.Write("Please input ''a'':");
&&&&&&&&&&&&&& string s = Console.ReadLine();
&&&&&&&&&&&&&&&if(s == "a")
&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&& et.RaiseEvent();
&&&&&&&&&&&&&& }
&&&&&&&&&&&&&& else
&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&Console.WriteLine("Error");
&&&&&&&&&&&&& }
输出结果如下,红色为用户的输入:
Please input ‘a’: a
My event is ok!
23.存储过程学习(转载)
存储过程 包含三部分: 声明,执行部分,异常。
可以有无参数程序和带参数存储过程。
无参程序语法
1&create&or&replace&procedure&NoParPro
5&exception
&& 带参存储过程实例
&1&create&or&replace&procedure&queryempname(sfindno&emp.empno%type)&as
&2&&&&&&&&sName&emp.ename%
&3&&&&&&&&sjob&emp.job%
&5&&&&& & ....
&7&exception
&&&&&&&&& ....
&& 带参数存储过程含赋值方式
&1&create&or&replace&procedure&runbyparmeters&&(isal&in&emp.sal%type,
&&&&&&&&&&&&&&&&&&&&&&&&&&& sname&out&varchar,sjob&in&out&varchar)
&2&&as&icount&number;
&4&&&&&&&select&count(*)&into&icount&from&emp&where&sal&isal&and&job=
&5&&&&&&&if&icount=1&then
&6&&&&&&&& ....
&9&&&&&&&else
10&&&&& && ....
12&&&&&&&end&if;
13&&exception
14&&&&&&&when&too_many_rows&then
15&&&&&&&DBMS_OUTPUT.PUT_LINE('返回值多于1行');
16&&&&&&&when&others&then
17&&&&&&&DBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS过程中出错!');
& 过程调用
&1&declare
&2&&&&&&&&realsal&emp.sal%
&3&&&&&&&&realname&varchar(40);
&4&&&&&&&&realjob&varchar(40);
&6&&&&&&&&realsal:=1100;
&7&&&&&&&&realname:='';
&8&&&&&&&&realjob:='CLERK';
&9&&&&&&&&runbyparmeters(realsal,realname,realjob);&&&& --必须按顺序
10&&&&&&&&DBMS_OUTPUT.PUT_LINE(REALNAME||'&&&'||REALJOB);
&1&declare
&2&&&&&&&realsal&emp.sal%
&3&&&&&&&realname&varchar(40);
&4&&&&&&&realjob&varchar(40);
&6&&&&&&&realsal:=1100;
&7&&&&&&&realname:='';
&8&&&&&&&realjob:='CLERK';
&9&&&&&&&runbyparmeters(sname=&realname,isal=&realsal,sjob=&realjob);& --指定值对应变量顺序可变
10&&&&&&&DBMS_OUTPUT.PUT_LINE(REALNAME||'&&&'||REALJOB);
24.泛型的FindAll()方法
我在工作中遇到要像DataSet一样过滤数据集中的数据,但是数据返回类型是泛型,因此要用List.FindAll()方法.
//List&Model& listModel已经有值,listModelNew为过滤后所要的数据集
List&Model& listModelNew=listModel.FindAll(delegate(Model m)
&&&&return m.UserId==9527;
25.如何將DataSet中的數據導出為Excel?
&& Response.Clear();
&&&Response.Charset = "big5";//繁體
&&&Response.ContentType = "application/vnd.ms-excel";
&&&System.IO.StringWriter oSW = new System.IO.StringWriter();
&&&HtmlTextWriter oHW = new HtmlTextWriter(oSW);
&&&DataGrid oDG = new DataGrid();
&&&oDG.DataSource = oDS.Tables[0];
&&&oDG.DataBind();
&&&oDG.RenderControl(oHW);
&&&Response.Write(oSW.ToString());
&&&Response.Flush();
&&&Response.Close();
26.如何画柏拉图?
public void Render(string title, string subTitle, int width, int height,
&&&&&&&&&&& string XDesc, string YLeftDesc, string YRightDesc,
&&&&&&&&&&& DataTable DT, Stream target)
&&&&&&&&&&& int CHART_TOP = 80;&&&&&//圖距頂段
&&&&&&&&&&& int CHART_HEIGHT = height - 180;&//圖高
&&&&&&&&&&& int CHART_LEFT = 70;&&&&&//圖距左邊
&&&&&&&&&&& int CHART_WIDTH = width - 140;&&//圖寬
&&&&&&&&&&& //計算最高點
&&&&&&&&&&& int highPoint = 0;
&&&&&&&&&&& foreach (DataRow dr in DT.Rows)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& highPoint += int.Parse(dr[0].ToString());
&&&&&&&&&&& }
&&&&&&&&&&& //建立一個Graphics對象實例
&&&&&&&&&&& Bitmap bm = new Bitmap(width, height);
&&&&&&&&&&& Graphics g = Graphics.FromImage(bm);
&&&&&&&&&&& //設置條型圖形和文字屬性
&&&&&&&&&&& g.SmoothingMode = SmoothingMode.D
&&&&&&&&&&& g.TextRenderingHint = TextRenderingHint.AntiA
&&&&&&&&&&& //設定畫布和邊框
&&&&&&&&&&& g.Clear(Color.LightSkyBlue);
&&&&&&&&&&& g.FillRectangle(Brushes.LightYellow, CHART_LEFT - 1, CHART_TOP, CHART_WIDTH + 2, CHART_HEIGHT + 2);
&&&&&&&&&&& //添主圖背景為淡黃色
&&&&&&&&&&& //畫座標*********************************************
&&&&&&&&&&& float sCale = float.Parse(highPoint.ToString()) / 4;
&&&&&&&&&&& float tempPoint = 0;
&&&&&&&&&&& for (int i = CHART_TOP + CHART_HEIGHT; i &= CHART_TOP; i -= CHART_HEIGHT / 4)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& g.DrawLine(Pens.Black, new Point(CHART_LEFT, i), new Point(CHART_LEFT + CHART_WIDTH, i));
&&&&&&&&&&&&&&& g.DrawString(tempPoint.ToString(), new Font("Arial", 9, FontStyle.Regular), Brushes.Black, new Point(CHART_LEFT - 25, i - 6));
&&&&&&&&&&&&&&& tempPoint += sC
&&&&&&&&&&& }//畫橫線和左邊刻度
&&&&&&&&&&& g.DrawLine(Pens.Black, new Point(CHART_LEFT, CHART_TOP), new Point(CHART_LEFT, CHART_TOP + CHART_HEIGHT));
&&&&&&&&&&& //左座標
&&&&&&&&&&& g.DrawString(YLeftDesc, new Font("Arial", 9, FontStyle.Regular), Brushes.Black, new Point(CHART_LEFT - 65, CHART_TOP + CHART_HEIGHT / 2));
&&&&&&&&&&& //左座標描述
&&&&&&&&&&& g.DrawLine(Pens.Black, new Point(CHART_LEFT + CHART_WIDTH, CHART_TOP), new Point(CHART_LEFT + CHART_WIDTH, CHART_TOP + CHART_HEIGHT));
&&&&&&&&&&& //右座標
&&&&&&&&&&& g.DrawString(YRightDesc, new Font("Arial", 9, FontStyle.Regular), Brushes.Black, new Point(CHART_LEFT + CHART_WIDTH + 35, CHART_TOP + CHART_HEIGHT / 2));
&&&&&&&&&&& //右座標描述
&&&&&&&&&&& g.DrawString(XDesc, new Font("Arial", 9, FontStyle.Regular), Brushes.Black, new Point(CHART_LEFT + CHART_WIDTH / 2 - 40, CHART_TOP + CHART_HEIGHT + 30));
&&&&&&&&&&& //底座標描述
&&&&&&&&&&& int sCaleR = CHART_HEIGHT / 10;
&&&&&&&&&&& tempPoint = CHART_TOP;
&&&&&&&&&&& for (int i = 10; i &= 0; i--)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& g.DrawLine(Pens.Black, new Point(CHART_LEFT + CHART_WIDTH, int.Parse(tempPoint.ToString())), new PointF(float.Parse((CHART_LEFT + CHART_WIDTH + 5).ToString()), tempPoint));
&&&&&&&&&&&&&&& g.DrawString((i * 10).ToString(), new Font("Arial", 9, FontStyle.Regular), Brushes.Black, new PointF(float.Parse((CHART_LEFT + CHART_WIDTH + 12).ToString()), tempPoint - 5));
&&&&&&&&&&&&&&& tempPoint += sCaleR;
&&&&&&&&&&& }//右座標刻度
&&&&&&&&&&& //畫大標題
&&&&&&&&&&& g.DrawString(title, new Font("Arial", 14), Brushes.Black, new PointF(width / 2 - 150, 15));
&&&&&&&&&&& //畫小標題
&&&&&&&&&&& g.DrawString(subTitle, new Font("Arial", 12), Brushes.Black, new PointF(width / 2 - 40, 45));
&&&&&&&&&&& //畫條型圖
&&&&&&&&&&& float barWidth = CHART_WIDTH / (DT.Rows.Count * 2);
&&&&&&&&&&& PointF barOrigin = new PointF(CHART_LEFT + (barWidth / 2), 0);
&&&&&&&&&&& float barHeight = 0;
&&&&&&&&&&& PointF[] linePoints = new PointF[DT.Rows.Count];&&&&&&&//描點個數陣列
&&&&&&&&&&& float Percents = 0;
&&&&&&&&&&& for (int i = 0; i & DT.Rows.C i++)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& barHeight = Convert.ToSingle(DT.Rows[i][0]) * CHART_HEIGHT / highP
&&&&&&&&&&&&&&& barOrigin.Y = CHART_TOP + CHART_HEIGHT - barH
&&&&&&&&&&&&&&& g.FillRectangle(new SolidBrush(ChartUtil.GetChartItemColor(i)), barOrigin.X, barOrigin.Y, barWidth, barHeight);
&&&&&&&&&&&&&&& //畫矩形
&&&&&&&&&&&&&&& g.DrawString(Convert.ToString(DT.Rows[i][1]), new Font("Arial", 8, FontStyle.Regular), Brushes.Black, new PointF(barOrigin.X, CHART_TOP + CHART_HEIGHT + 5), new StringFormat(StringFormatFlags.DirectionVertical));
&&&&&&&&&&&&&&& //畫條形描述
&&&&&&&&&&&&&&& Percents += Convert.ToSingle(DT.Rows[i][0]) / highP
&&&&&&&&&&&&&&& g.DrawString(Percents.ToString("0.00%"), new Font("Arial", 8, FontStyle.Regular), Brushes.Black, new PointF(barOrigin.X - 5, CHART_TOP + (1 - Percents) * CHART_HEIGHT - 15));
&&&&&&&&&&&&&&& //畫白份比
&&&&&&&&&&&&&&& linePoints[i] = new PointF(barOrigin.X + barWidth / 2, CHART_TOP + (1 - Percents) * CHART_HEIGHT);
&&&&&&&&&&&&&&& //畫連線點
&&&&&&&&&&&&&&& barOrigin.X = barOrigin.X + (barWidth * 2);
&&&&&&&&&&& }
&&&&&&&&&&& g.DrawLines(Pens.Red, linePoints);//連線
&&&&&&&&&&& //輸出圖像
&&&&&&&&&&& bm.Save(target, ImageFormat.Gif);
&&&&&&&&&&& //回收資源
&&&&&&&&&&& bm.Dispose();
&&&&&&&&&&& g.Dispose();
27.HAVING的使用
把 HAVING 加入 SQL 的原因是,WHERE 无法应用于合计函数,而如果没有 HAVING,就无法测试结果条件。
表 "Sales":
SELECT Company,SUM(Amount) FROM Sales
GROUP BY Company
HAVING SUM(Amount)&10000
SUM(Amount)
28.C#操作文件(转载)
C# 操作文件
在.NET Framework中进行的所有的输入和输出工作都要使用到流。流是串行化设备的抽象串行化设备可以以线性方式存储数据,并可以以同样的方式访问:一次访问—个字节。此设备可以是磁盘文件、打印机、内存位置和或任何其他支持以线性方式读写的对象。
当向某些外部目标写数据时,就要用到输出流,这可以是物理磁盘文件、网络位置、打印机或其他程序。&
常用的类:
File------实用类,提供许多静态方法,用于移动、删除、和复制文件。
Directory------实用类,提供许多静态方法,用于移动、删除和复制目录。
Path------ 实用类,用于处理路径名称。
FileInfo------表示磁盘上的物理文件,具有可以处理此文件的方法,要完成对文件的读写工作,就必须创建Stream对像。
DirectoryInfo------表示磁盘上的物理目录,具有可以处理此目录的方法
FileStream-------表示可以被写或被读,或二者都可的文件,此文件可以同步或异步读和写
StreamReader------从流中读取字符数据,并可通过使用FileStream被创建为基类。
StreamWriter------向流写字符数据,可通过使用FileStream被创建为基类。
FileSystemWatcher---- FileSystemWatcher是用于监控文件和目录,并在这些位置发生变化时,给出应用程序可以捕获的事件。
◆File和Directory类
作为实用类,File和Directory类都提供了许多方法,用于处理文件系统以及其中的文件和目录。这些是静态方法,涉及移动文件、查询和更新属性并创建FileStream对象。
File类一些最常用的静态方法:
Copy()------将文件复制到规定的位置
Create()------在规定的位置上创建文件
Delete()------删除文件
Open()-------在规定的路径上返回FileStream对像
Move()------将规定的文件移动到新位置,可以在新位置给文件规定不同的名字
Directory类的一些常用的静态方法
CreateDirectory()------创建具有规定路径的目录
Delete()------删除规定的目录以及其中的所有文件
GetDirectories()------返回表示当前目录之下的目录的Directory对像的数组
GetFiles()-------返回在当前目录中的File对像的数组
Move()------将规定的目录移动到新位置。可以在新位置为文件夹规定一个新名称
FileInfo 类
FileInfo类不像File类,它没有静态方法,仅可用于实例化的对像。FileInfo对像表示在磁盘或网络位置的文件,注意它不是流,为了读写文件,必须创建Stream对像。
fileInfo类提供了下面的关于基础性的文件的属性,这些属性可能用来更新文件。
Attributes-----获取或设置当前文件的属性
CreationTime------获取当前文件的创建日期和时间
DirectoryName------获取文件目录的路径
Exists------判断是否存在文件
FullName------检索文件的完整路径
Length------获取文件的容量
Name------仅仅返回文件的名称,而不是完整的文件位置路径、
&&& 当在.NET代码中规定路径名时,您可以使用绝对路径名,也可以使用相对路行名。绝对路径名显式地规定文件或目录来自于哪—个己知的位置——比如是c:驱动器。它的—个范例是C:\work\LogFile.txt。注意它淮确地定义了其位置。
  相对路径名相对于应用程序在文件系统上运行的位置。通过使用相对路径名称,无需规定已知的驱动器或位置;当前的目录就是起点。例如,如果应用程序运行在c:\DeVelopment\FileDemo目录上(这里的应用程序是指代码生成后的exe文件),并使用了相对路径“LogFile.txt,”,则该文件就位于C:\DeVelopment\FileDemo\LogFile.txt中。为了上移目录,则使用..&字符。这样,在同一个应用程中路径“../test.txt”是指向应用程序所在的目录的上一级目录里的文件test.txt。
◆FileStream对象
FileStream对象表示在磁盘或网络路径上指向文件的流。当类提供向文件读写字节的方法时,经常使用StreamReader或StreamWriter执行这些功能。这是因为FileStream类操作字节和字节数组,而Stream类操作字符数据。字符数据易于使用,但是有些操作比如随机文件访问,就必须由FileStream对象执行。
FileStream对象的构造函数:
FileStream aFile = new FileStream(“Log.txt”,FileMode.OpenOrCreate);
&FileMode枚举具有几种成员:
Append------如果文件存在,就打开文件,将文件位置移动到文件的末尾,并创建一个新文件。FileMode.Append仅可以与枚举FileAccess.Write联合使用
Create------创建新文件;如果存在这样的文件,就破坏它。
CreateNew------创建新文件,但是如果已经存在此文件,则抛出异常
Open------打开现有的文件,但是不存在所指定的文件,则抛出异常
OpenOrCreate------如果文件存在,则规定打开文件,否则就创建新文件,如果文件已经存在,则保留在文件中的数据
Truncate------打开现有文件,清除其内容,然后我们可以向文件写入全新的数据,但是保留文件的初始创建日期,必须存在有文件,否则就抛出异常
 前面的构造函数默认以只读模式打开文件,需要一个附加参数规定不同的访问级别,此参数是FileAccess参数。
FileStream aFile=new FileStream(”Log.txt”,fileMode.OpenOrCreate,FileAccess.Write)
&&&& FileAccess枚举有三种类型:Read、Write、ReadWrite.此属性的作用是:基于用户的身份验证级别改变用户对文件的访问
 读取文件的位置用seek:public long Seek(long offset,SeekOrigin origin)
&Long offset是规定文件指针以字节为单位的移动距离;SeekOrigin origin是规定开始计算的起始位置,此枚举包含3个值:Begin,Current和End。
   例:aFile.Seek(8,SeekOrigin.Begin);// SeekOrigin.Begin指得是文件指针从文件的第一个字节起;而参数‘8‘指得是移动到文件的第8个字节
   例2:afile.Seek(2,SeekOrigin.Current)//在当前位置开始,再移动2个字节。
   例3:aFile.Seek(-5,SeekOrigin.End)//在文件末端位置开始,倒数5个字节。
& 读取数据
使用FileStream类读取数据不像使用StreamReader和StreamWriter类读取数据那么容易,这是因为FileStream类只能处理原始字节(raw byey),这使得FileStream类可以用于任何数据文件,而不仅仅是文本文件,通过读取字节数据就可以读取类似图像和声音的文件。这种灵活性的代价是不能使用它直接读入字符串,而使用StreamWriter和StreaMeader类却可以这样处理,从是有几种转换类可以很容易地将字节数组转换为字符数组,或者进行相反的操作。
Read()方法是从FileStream对象所指向的文件访问数据的主要手段:
Public int Read(byte[] array,int offset, int count)//第一个参数是被传输进来的字节数组,用以接受FileStream对象中的数据。第二个参数是字节数组中开始写入数据的位置,它通常是0,表示从数组的开端的文件中向数组写数据,最后一个参数是规定从文件中读出多少字节。
写入数据的流程是先获取字节数组,再把字节数据转换为字符数组,然后把这个字符数组用Write()方法写入到文件中,当然在写入的过程中,可以确定在文件的什么位置写入,写多少字符等等。
文件读写的范例:
using&System.Collections.G
using&System.T
using&System.IO;
namespace&myFile
&&&&class&Program
&&&&&&&&static&void&Main(string[]&args)
&&&&&&&&&&&&byte[]&byData&=&new&byte[<span style="color: #0];//建立一个FileStream要用的字节组
&&&&&&&&&&&&char[]&charData&=&new&char[<span style="color: #0];//建立一个字符组
&&&&&&&&&&&&try
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&FileStream&aFile&=&new&FileStream("//Data.txt",&FileMode.Open);//实例化一个FileStream对象,用来操作data.txt文件,操作类型是
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&aFile.Seek(<span style="color: #,&SeekOrigin.Begin);//把文件指针指向,从文件开始位置向前55位字节所指的字节
&&&&&&&&&&&&&&&&aFile.Read(byData,&<span style="color: #,&<span style="color: #0);//读取FileStream对象所指的文件到字节数组里
&&&&&&&&&&&&}
&&&&&&&&&&&&catch&(IOException&e)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Console.WriteLine("close");
&&&&&&&&&&&&&&&&return;
&&&&&&&&&&&&}
&&&&&&&&&&&&Decoder&d&=&Encoding.UTF8.GetDecoder();//
&&&&&&&&&&&&d.GetChars(byData,&<span style="color: #,&byData.Length,&charData,&<span style="color: #);//将编码字节数组转换为字符数组
&&&&&&&&&&&&Console.WriteLine(charData);
&&&&&&&&&&&&Console.ReadLine();
&&&&&&&&&&&&return;
写入文件:
using&System.Collections.G
using&System.T
using&System.IO;
namespace&myFile
&&&&class&Program
&&&&&&&&static&void&Main(string[]&args)
&&&&&&&&&&&&byte[]&byData&=&new&byte[<span style="color: #0];//建立一个FileStream要用的字节组
&&&&&&&&&&&&char[]&charData&=&new&char[<span style="color: #0];//建立一个字符组
&&&&&&&&&&&&try
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&FileStream&aFile&=&new&FileStream("//Data.txt",&FileMode.Open);//实例化一个FileStream对象,用来操作data.txt文件,操作类型是
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&charData&=&"我是谁?111?".ToCharArray();//将字符串内的字符复制到字符组里
&&&&&&&&&&&&&&&&aFile.Seek(<span style="color: #,&SeekOrigin.End);
&&&&&&&&&&&&&&&&Encoder&el&=&Encoding.UTF8.GetEncoder();//编码器
&&&&&&&&&&&&&&&&el.GetBytes(charData,&<span style="color: #,&charData.Length,&byData,&<span style="color: #,&true);
&&&&&&&&&&&&&&&&aFile.Write(byData,&<span style="color: #,&byData.Length);
&&&&&&&&&&&&}
&&&&&&&&&&&&catch&(IOException&e)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Console.WriteLine("close");
&&&&&&&&&&&&&&&&return;
&&&&&&&&&&&&}
&&&&&&&&&&&
◆StreamWriter对像
用FileWriter来随机读取文件是个好主意,而用StreamWriter可以直接把字符串写入文件中,它处理重要的转换和向FileStream对像写入工作。创建StreamWriter有很多方法:
FileStream aFile = new FileStream(“Log.txt”,FileMode.CreatcNew);
StreamWriter sw = new StreamWriter(aFile);
也可直接从文件中创建StreamWriter对象:
  StreamWriter sw = new StreamWriter(“Log.txt”,true);
&&& 后面这个Boolean值规定是附加文件还是创建新文件,如果此值为false,则就创建一个新文件,或者截取现有文件并打开它。如果此值设置为true,则打开文件,保留原来的数据,如果找不到文件,则创建一个新文件。注意:当创建FileStream对象时,您无法得到选项的范围。除了使用Boolean值附加或创建新文件外,我们根本就无法像使用FileStream类时那样规定FileMode属性;而且,您也无法设置FileAccess属性.因此您总是具有对文件的读写特权,为了使用任何高级参数,您必须在FileStream构造函数中规定这些参数,然后在FileStream对象中创建StreamWriter。
using&System.Collections.G
using&System.T
using&System.IO;
namespace&StreamWriterFile
&&&&class&Program
&&&&&&&&static&void&Main(string[]&args)
&&&&&&&&&&&&try
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&FileStream&aFile&=&new&FileStream("data1.txt",&FileMode.OpenOrCreate);//建立一个fileStream对象
&&&&&&&&&&&&&&&&StreamWriter&sw&=&new&StreamWriter(aFile);//用FileStream对像实例一个StreamWriter对象
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&sw.Write("first.");
&&&&&&&&&&&&&&&&sw.WriteLine("hello&world!!!");//写入字符串,方法WriteLine写入时后面跟一个换行符
&&&&&&&&&&&&&&&&sw.Write("This&is&a");//写入字符串,方法Write写入时没有换行符
&&&&&&&&&&&&&&&&sw.Write("string&of&characters.");
&&&&&&&&&&&&&&&&sw.Close();//用完后必须关闭对像
&&&&&&&&&&&&}
&&&&&&&&&&&&catch&(IOException&e)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Console.WriteLine(e.ToString());
&&&&&&&&&&&&}
◆StreamReader对象
&1.读取文件
输入流用于从外部源读取数据,在很多情况下,数据源可以是磁盘上的文件或网络的某些位置,任何可能发送数据的位置都可以是数据源,比如网络应用程序,web服务,甚至是控制台。StreamReader是一个通用类,可以用于任何流;StreamReader对象的创建方式非常类似于StreamWriter对象的创建方式。
StreamWriter类有两个基本的方法read和readLine
Read()方法将流的下一个字符作为正整数值返回,如果到达了流的结尾处,则返回-1
ReadLing()方法是读取并返回一行字符,如果返回为空,那么就是到达了流的结尾。
ReadEnd()方法读小文件最好,它直接读取完整的文件并作为字符串返回。
using&System.Collections.G
using&System.T
using&System.IO;
namespace&StreamReaderTest
&&&&class&Program
&&&&&&&&static&void&Main(string[]&args)
&&&&&&&&&&&&string&strL&
&&&&&&&&&&&&try
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Console.Write("请输入文件路径及文件名:");
&&&&&&&&&&&&&&&&string&mess&=&Console.ReadLine();
&&&&&&&&&&&&&&&&FileStream&aFile&=&new&FileStream(mess,&FileMode.Open);
&&&&&&&&&&&&&&&&StreamReader&sr&=&new&StreamReader(aFile);//用FileStream对象实例化一个StreamReader对象
&&&&&&&&&&&&&&&&//strLine&=&sr.ReadToEnd();//读取完整的文件,如果用这个方法,就可以不用下面的while循环
&&&&&&&&&&&&&&&&strLine&=&sr.ReadLine();//&&读取一行字符并返回
&&&&&&&&&&&&&&&&while&(strLine&!=&null)
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&Console.WriteLine(strLine);
&&&&&&&&&&&&&&&&&&&&strLine&=&sr.ReadLine();
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&sr.Close();
&&&&&&&&&&&&&&&&Console.ReadLine();
&&&&&&&&&&&&}
&&&&&&&&&&&&catch&(IOException&e)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&Console.WriteLine("an&IOexception&has&been&thrown!");
&&&&&&&&&&&&&&&&Console.WriteLine(e.ToString());
&&&&&&&&&&&&&&&&return;
&&&&&&&&&&&&}
&&&&&&&&&&&&return;
2.分隔文件
读取使用逗号分隔的文件,string类提供了一种称为Split()的方法,可以用于将字符串按照提供的分隔符分隔成字符组.
using&System.Collections.G
using&System.T
using&System.IO;
namespace&CommaValues
&&&&class&Program
&&&&&&&&static&void&Main(string[]&args)
&&&&&&&&&&&&while&(true)
&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&string&strL
&&&&&&&&&&&&&&&&string[]&strA
&&&&&&&&&&&&&&&&char[]&charArray&=&new&Char[]&{&','&};
&&&&&&&&&&&&&&&&Console.Write("请输入文件内容以逗号分隔的文件路径及文件名:");
&&&&&&&&&&&&&&&&string&name&=&Console.ReadLine();
&&&&&&&&&&&&&&&&try
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&FileStream&aFile&=&new&FileStream(name,&FileMode.Open);
&&&&&&&&&&&&&&&&&&&&StreamReader&sr&=&new&StreamReader(aFile);
&&&&&&&&&&&&&&&&&&&&strLine&=&sr.ReadLine();
&&&&&&&&&&&&&&&&&&&&while&(strLine&!=&null)
&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&strArray&=&strLine.Split(charArray);
&&&&&&&&&&&&&&&&&&&&&&&&for&(int&x&=&<span style="color: #;&x&&=&strArray.GetUpperBound(<span style="color: #);&x++)
&&&&&&&&&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&Console.WriteLine(strArray[x].Trim());
&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&strLine&=&sr.ReadLine();
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&sr.Close();
&&&&&&&&&&&&&&&&&&&&//Console.ReadLine();
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&catch&(IOException&e)
&&&&&&&&&&&&&&&&{
&&&&&&&&&&&&&&&&&&&&Console.WriteLine(e.ToString());
&&&&&&&&&&&&&&&&&&&&return;
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&//
&&&&&&&&&&&&}
29.在应用程序启动目录下创建XML文件
protected void createXML(string xmlFileName)
&&&&&&&&&&&&&&& XmlTextWriter writer = new XmlTextWriter(".\\" + xmlFileName + ".xml", System.Text.Encoding.GetEncoding("utf-8"));
&&&&&&&&&&&&&&& //使用自动缩进便于阅读&&
&&&&&&&&&&&&&&& writer.Formatting = Formatting.I
&&&&&&&&&&&&&&& writer.WriteRaw("&?xml version=" + "\"1.0" + "\" encoding=" + "\"utf-8" + "\" ?&");
&&&&&&&&&&&&&&& //书写根元素&&
&&&&&&&&&&&&&&& writer.WriteStartElement("OnlineMonXML");
&&&&&&&&&&&&&&& writer.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
&&&&&&&&&&&&&&& writer.WriteAttributeString("version", "0.09.0005");
&&&&&&&&&&&&&&& //添加次级元素&&
&&&&&&&&&&&&&&& writer.WriteStartElement("OnlineMonData");
&&&&&&&&&&&&&&& //添加次级元素&&
&&&&&&&&&&&&&&& writer.WriteStartElement("Stations");
&&&&&&&&&&&&&&& //添加次级元素&&
&&&&&&&&&&&&&&& writer.WriteStartElement("Station");
&&&&&&&&&&&&&&& writer.WriteAttributeString("strStatuinType", "污染源自动监测");
&&&&&&&&&&&&&&& writer.WriteAttributeString("strAreaID", "440100");
&&&&&&&&&&&&&&& writer.WriteAttributeString("nStationID", "1");
&&&&&&&&&&&&&&& //添加次级元素&&
&&&&&&&&&&&&&&& writer.WriteStartElement("Points");
&&&&&&&&&&&&&&& //添加次级元素&&
&&&&&&&&&&&&&&& writer.WriteStartElement("Point");
&&&&&&&&&&&&&&& writer.WriteAttributeString("strAreaID", "440100");
&&&&&&&&&&&&&&& writer.WriteAttributeString("nStationID", "1");
&&&&&&&&&&&&&&& writer.WriteAttributeString("nPointID", "1");
&&&&&&&&&&&&&&& //添加次级元素&&
&&&&&&&&&&&&&&& writer.WriteStartElement("MonDatas");
&&&&&&&&&&&&&&& //添加次级元素&&
&&&&&&&&&&&&&&& writer.WriteStartElement("MonData");
&&&&&&&&&&&&&&& writer.WriteAttributeString("dMontime", "T00:50.:00");
&&&&&&&&&&&&&&& writer.WriteAttributeString("dDura", "POYOMODTOH5MOS");
&&&&&&&&&&&&&&& //添加次级元素&&
&&&&&&&&&&&&&&& writer.WriteStartElement("ItemDatas");
&&&&&&&&&&&&&&& //添加子元素&&
&&&&&&&&&&&&&&& writer.WriteStartElement("ItemData");
&&&&&&&&&&&&&&& writer.WriteAttributeString("strItem", "COD");
&&&&&&&&&&&&&&& writer.WriteAttributeString("fValue", "2.5");
&&&&&&&&&&&&&&& writer.WriteAttributeString("strUnit", "mg/m3");
&&&&&&&&&&&&&&& writer.WriteAttributeString("bChecked", "true");
&&&&&&&&&&&&&&& //关闭次级元素DatabaseSetting&&
&&&&&&&&&&&&&&& writer.WriteEndElement();
&&&&&&&&&&&&&&& writer.WriteStartElement("ItemData");
&&&&&&&&&&&&&&& writer.WriteAttributeString("strItem", "水流量");
&&&&&&&&&&&&&&& writer.WriteAttributeString("fValue", "30");
&&&&&&&&&&&&&&& writer.WriteAttributeString("strUnit", "m3/s");
&&&&&&&&&&&&&&& writer.WriteAttributeString("bChecked", "true");
&&&&&&&&&&&&&&& //关闭次级元素DatabaseSetting&&
&&&&&&&&&&&&&&& writer.WriteEndElement();
&&&&&&&&&&&&&&& //关闭根元素&&
&&&&&&&&&&&&&&& writer.WriteFullEndElement();
&&&&&&&&&&&&&&& //将XML写入文件并关闭writer&&
&&&&&&&&&&&&&&& writer.Close();
&&&&&&&catch (Exception ex)
&&&&&&&&&&&&Response.Write("&script language='javascript'&alert('"+ ex.Message +"')&/script&");
30.ASP.NET中防止用户多次登录的方法
在web开发时,有的系统要求同一个用户在同一时间只能登录一次,也就是如果一个用户已经登录了,在退出之前如果再次登录的话需要报错。
  常见的处理方法是,在用户登录时,判断此用户是否已经在Application中存在,如果存在就报错,不存在的话就加到Application中(Application是所有Session共有的,整个web应用程序唯一的一个对象):
  string strUserId = txtUser.T
  ArrayList list = Application.Get("GLOBAL_USER_LIST") as ArrayL
  if (list == null)
  list = new ArrayList();
  for (int i = 0; i & list.C i++)
  if (strUserId == (list[i] as string))
  //已经登录了,提示错误信息
  lblError.Text = "此用户已经登录";
  list.Add(strUserId);
  Application.Add("GLOBAL_USER_LIST", list);
  当然这里使用Cache等保存也可以。
  接下来就是要在用户退出的时候将此用户从Application中去除,我们可以在Global.asax的Session_End事件中处理:
  void Session_End(object sender, EventArgs e)
  // 在会话结束时运行的代码。
  // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
  // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
  // 或 SQLServer,则不会引发该事件。
  string strUserId = Session["SESSION_USER"]
  ArrayList list = Application.Get("GLOBAL_USER_LIST") as ArrayL
  if (strUserId != null && list != null)
  list.Remove(strUserId);
  Application.Add("GLOBAL_USER_LIST", list);
  这些都没有问题,有问题的就是当用户直接点浏览器右上角的关闭按钮时就有问题了。因为直接关闭的话,并不会立即触发Session过期事件,也就是关闭浏览器后再来登录就登不进去了。
  这里有两种处理方式:
  1、使用script方式
  在每一个页面中加入一段javascript代码:
  function window.onbeforeunload()
  if (event.clientX&document.body.clientWidth && event.clientY&0||event.altKey){
  window.open("logout.aspx");
  由于onbeforeunload方法在浏览器关闭、刷新、页面调转等情况下都会被执行,所以需要判断是点击了关闭按钮或是按下Alt+F4时才执行真正的关闭操作。
  然后在logout.aspx的Page_Load中写和Session_End相同的方法,同时在logout.aspx中加入事件:onload="javascript:window.close()"
  但是这样还是有问题,javascript在不同的浏览器中可能有不同的行为,还有就是当通过文件-&关闭时没有判断到。
  2、使用xmlhttp方法(这种方法测试下来没有问题)
  在每个页面中加入如下的javascript(这些javascript也可以写在共通里,每个页面引入就可以了)
  var x=0;
  function myRefresh()
  var httpRequest = new ActiveXObject("microsoft.xmlhttp");
  httpRequest.open("GET", "test.aspx", false);
  httpRequest.send(null);
  if(x&60) //60次,也就是Session真正的过期时间是30分钟
  setTimeout("myRefresh()",30*1000); //30秒
  myRefresh();
  在web.config中设置
&sessionState mode="InProc" timeout="1"&&/sessionState&&
  test.aspx页面就是一个空页面,只不过需要在Page_Load中加入:
  Response.Expires = -1;
保证不使用缓存,每次都能调用到这个页面。
  原理就是:设置Session的过期时间是一分钟,然后在每个页面上定时每30秒连接一次测试页面,保持Session有效,总共连60次,也就是30分钟。如果30分钟后用户还没有操作,Session就会过期。当然,如果用户直接关闭浏览器,那么一分钟后Session也会过期。这样就可以满足要求了。
发表评论:
TA的最新馆藏[转]&[转]&[转]&[转]&

我要回帖

更多关于 vs2005 win7 的文章

 

随机推荐