.NET新手系列(八)

摘要:
创建一个Windows服务VisualStudio.NET能够使创建一个Windows服务变成相当简单的一件事情:1.新建一个项目2.选择Windows服务3.设计器会以设计模式打开4.从工具箱的组件表当中拖动一个Timer对象到这个设计表面上5.设置Timer属性,Enabled属性为False,Interval属性30000毫秒6.切换到代码视图页,然后为这个服务填加功能,如:protectedoverridevoidOnStart{//TODO:在此处添加代码以启动服务。

新手区似乎没什么人气。
另外,博客园的这个文字编辑器实在是很烂(难道是我的人品问题?),想改个字号就卡在那里半天不动,一回车,字体还会莫名其妙地忽大忽小,惨不忍睹。

1.遇到的问题:

关于DataGrid动态添加绑定列

解决方法:

(1)//声明绑定列数组

BoundColumn[] bcArray=new BoundColumn[2];

(2)//为数组成员初始化,指定其绑定的数据项

bcArray[0]=new BoundColumn();

bcArray[0].DataField ="FSaleInQty";

bcArray[1]=new BoundColumn();

bcArray[1].DataField ="FSaleInQtyPercent";

(3)//DataBind执行之前,将这些列添加到DataGrid

………

this.dgDeposit.DataSource =dt;

//添加动态生成的若干个绑定列

for(int i=0;i<2;i++)

{

bcArray[i].HeaderStyle.BackColor =Color.RoyalBlue;

bcArray[i].ItemStyle.BackColor =Color.MintCream;

bcArray[i].ItemStyle.Width =Unit.Pixel(50);

bcArray[i].ItemStyle.HorizontalAlign =HorizontalAlign.Right;

this.dgDeposit.Columns.Add(bcArray[i]);

}

this.dgDeposit.DataBind();

2.遇到的问题:

关于DataGrid单元格的自动换行

解决方法:

通常在DataGrid中指定列宽就可以使得它自动换行,需要注意的是,有时候自己做测试时为了方便可能在手动输入记录时按住某个键输入一个字符串,这样在DataGrid将不会为之换行,可能的解释是系统将其认为是一个单词。

3.遇到的问题:

关于sql server中交叉表的查询操作,即行转列显示

解决方法:

有时会遇到用SQL实现类似以下的形式转化:

年份

时间段

数量

1900

A1

10

1900

B1

20

1950

A1

23

1950

B1

30

到:

年份

时间段A1的数量

时间段B1的数量

1900

10

20

1950

23

30

则可参见sql server中的交叉数据报表:

联机丛书--à目录--à访问和更改关系数据--à高级查询概念--àTransact-SQL窍门

4.遇到的问题:

关于sql server中如何计算语句运行时间

解决方法:

写入语句:set statistics time on

则可以查询分析器消息栏看到语句执行时间

5.遇到的问题:

关于Windows服务

解决方法:

服务的概念不再多说,通过控制面板--à管理工具,可以查看系统已有的服务。

以下内容基本上是MSDN来的,改了一点程序。

创建一个Windows服务

Visual Studio .NET能够使创建一个Windows服务变成相当简单的一件事情:

1. 新建一个项目

2. 选择Windows服务

3. 设计器会以设计模式打开

4. 从工具箱的组件表当中拖动一个Timer对象到这个设计表面上 (注意: 要确保是从组件列表而不是从Windows窗体列表当中使用Timer)

5. 设置Timer属性,Enabled属性为FalseInterval属性30000毫秒

6. 切换到代码视图页(F7或在视图菜单当中选择代码),然后为这个服务填加功能,如:

protectedoverridevoid OnStart(string[] args)

{

// TODO: 在此处添加代码以启动服务。

this.timer1.Enabled =true;

WriteSome("some write start......");

}

protectedoverridevoid OnStop()

{

// TODO: 在此处添加代码以执行停止服务所需的关闭操作。

this.timer1.Enabled =false;

WriteSome("has stopped......");

}

privatevoid WriteSome(string s)

{

using (StreamWriter sw=File.AppendText(@"e:\somewrite.txt"))

{

sw.WriteLine(s);

}

}

privatevoid timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)

{

WriteSome("server running......");

}

其他代码依照系统生成的保留。

添加服务安装程序

创建一个Windows服务,仅用InstallUtil程序去安装这个服务是不够的。你必须还要把一个服务安装程序添加到你的Windows服务当中,这样便于InstallUtil或是任何别的安装程序知道应用你服务的是怎样的配置设置。

1. 将这个服务程序切换到设计视图

2. 任意右击设计视图空白处选择“添加安装程序”

3. 切换到刚被添加的ProjectInstaller的设计视图

4. 设置serviceInstaller1组件的属性:

1) ServiceName =my writesome server

2) StartType = Automatic

5. 设置serviceProcessInstaller1组件的属性

1) Account = LocalSystem

6. 生成解决方案

InstallUtil安装Windows服务

现在这个服务已经生成,你需要把它安装好才能使用。下面操作会指导你安装你的新服务。

1. 打开Visual Studio .NET命令提示

2. 改变路径到你项目所在的bin\Debug文件夹位置(如果你以Release模式编译则在bin\Release文件夹)

3. 执行命令“InstallUtil.exe WindowsServiceTest.exe”注册这个服务,使它建立一个合适的注册项。

4. 在windows的“服务”里,你可以发现你的Windows服务已经包含在服务列表当中了

5. 右击你的服务选择启动就可以启动你的服务了

该服务将在E盘下生成somewrite.txt文本文件,文本的内容类似以下:

some write start......

server running......

server running......

server running......

server running......

has stopped......

在每次需要修改Windows服务时,这就会要求你卸载和重新安装这个服务。不过要注意在卸载这个服务前,最好确保服务管理控制台已经关闭,这会是一个很好的习惯。如果没有这样操作的话,你可能在卸载和重安装Windows服务时会遇到麻烦。仅卸载服务的话,可以执行相的InstallUtil命令用于注销服务,不过要在后面加一个/u命令开关。

调试Windows服务

从另外的角度度看,调试Windows服务绝不同于一个普通的应用程序。调试Windows服务要求的步骤更多。服务不能象你对普通应用程序做的那样,只要简单地在开发环境下执行就可以调试了。服务必须首先被安装和启动,这一点在前面部分我们已经做到了。为了便于跟踪调试代码,一旦服务被启动,你就要用Visual Studio把运行的进程附加进来(attach)。记住,对你的Windows服务做的任何修改都要对这个服务进行卸载和重安装。

附加正在运行的Windows服务

为了调试程序,有些附加Windows服务的操作说明。这些操作假定你已经安装了这个Windows服务并且它正在运行。

1. Visual Studio装载这个项目

2. 点击“调试”菜单

3. 点击“进程”菜单

4. 确保显示系统进程被选

5. 可用进程列表中,把进程定位于你的可执行文件名称上点击选中它

6. 点击附加按钮

7. 点击确定

8. 点击关闭

9. timer1_Elapsed方法里设置一个断点,然后等它执行

6.遇到的问题:

关于MySQL的下载、安装等问题

解决方法:

有关mysql的最新版本,可上其官网www.mysql.com下载,目前最新版本为5.0.182006-3-19)。Windows用户应选择for windows下的,提供最小安装版本、普通安装版本、免安装版本,可选普通安装版本。

如果需要在.net下使用,在站内还可下载到MYSQL CONNECTOR FOR .NET,可直接下载免安装版,在.net项目中引用包中提供的dll即可。

图形界面方面,站也提供MYSQL QUERY BROWSER英文版的。第三方的还有MYSQL FRONT,可以找到中文版的,还不错。

安装过程相对简单,可在安装之后立即对mysql进行配置,在安装好之后,也可通过mysqlserver instance config wizard进行配置。

7.遇到的问题:

关于MySQL的简单使用

解决方法:

执行一些简单的命令可以直接用mysqlcommand line client。如果在安装配置的时候选中添加到windows变量中,也可以在windows命令行中执行,使用:mysql -u username -p -D test,其中-u参数指用户名,-p表示要求密码,-D指定数据库名,回车后会提示输入密码。

一些简单命令:

显示数据库版本:select version();

指定默认数据库:use test;

查看现有数据库:show databases;

查看当前数据库中的表:show tables;

修改终止符:如delimiter |,即把默认的终止符改为|,当你在命令行下编写或执行存储过程时,注意修改终止符,因为存储过程中难免使用到默认的终止符;,否则你将遇到:error 1064

其他常见的命令可打\h查看帮助。

8.遇到的问题:

SQL Server导出数据到mysql

解决方法:

可以在mysql官司网上下载myodbc,在connector for odbc选项里,安装后在:控制面板---数据源(odbc)下添加用户数据源。

打开SQL Server,右键某个数据库:全部任务---导出数据,在“目的”项选择ODBC,然后选择你刚配置好的那个odbc数据源名称。

另:当我在导出northwind库中的customers表时,提示“data too long for column ”,在mysql官网论坛上说是字符集的问题,customers表中有一些中东或是希腊字符,其中提供的方法是运行:set names xxx,其中xxx指字符集名,试了一下,好像不起作用。直接修改mysql安装目录下的my.ini文件,将其中server section项中的default-character-set改为utf8,然后重启windows服务中的mysql服务,可以了。

另外,有一个菜鸟问题:我在my.ini文件中看到分别有服务器端的默认字符集设置客户端的默认字符集设置,不知道客户端的默认字符集设置是什么意思?

9.遇到的问题:

一些打包工具

解决办法:

程序写好了,常常需要把它打包安装程序,可以使用Setup FactoryInstallShield等打包工具,其中InstallShield是公认的业界的老大,最新11.5版没有找到汉化版,试装了一下,安装过程比较麻烦,需要联网下载不少东西,软件功能繁杂,E文不好,很难应付。

另外,在11.5中提供的SQL Script功能中mysql项似乎不能用,microvision的论坛上说补丁可能在12.0版中打上。

Set Factory的安装起来比较快,也比较容易找到汉化的。它提供简单的脚本编程功能。

10.遇到的问题:

关于使用Setup Factory打包.NET程序与简单的脚本编写:

解决方法:

(以下内容适用于Setup Factory 7.0.1.0

1Setup Factory提供一些简单的脚本功能,例如可以用“File.Run()”运行可执行文件,用“Application.GetLastError()”获得错误码,用“..”连接字符串等,下面的例子是在SQL SERVER查询分析器中运行一个脚本文件1.sqlsql文件放在和安装程序相同的目录中),代码可以添加到:工程---操作中。

program="C:\\Program Files\\Microsoft SQL Server\\80\\Tools\\Binn\\isqlw.exe";

param="-S ServerName -d Northwind -E -i "..SessionVar.Expand("%SourceFolder%").."\\1.sql -o "..SessionVar.Expand("%SourceFolder%").."\\2.sql";

File.Run(program,param);

error = Application.GetLastError();

Dialog.Message("ERROR", _tblErrorMessages[error], MB_OK);

2)在7.0版本中,Setup Factory的默认从属资源中仅支持VB5.0VB6.0,想要在生成的安装程序中自动完成.NET FRAMEWORK的安装,须要按以下步骤做几件事:

首先找到Setup Factory安装目录下的Dependencies目录,在目录中新建一个dotnet2_0.xml的文件,文件内容太长,谁有需要可以留个邮箱。

然后,在Dependencies目录下新建子目录,取名dotnet2_0,将.NET FRAMEWORK安装程序dotnetfx.exe拷至该子目录下,dotnetfx.exe可在VS 2005的安装目录下的SDK\v2.0\BootStrapper\Packages\dotnetfx目录下找到。

完成之后打开Setup Factory,选择:资源---从属---添加,可以看到.NET FRAMEWORK 2.0了。

(在未安装.NET FRAMEWORK 2.0的机器上,能正常完成NET FRAMEWORK 2.0的安装,但在已经安装.NET FRAMEWORK 2.0的机器,仍会提示.NET FRAMEWORK版本太旧(不影响程序安装),应该是XML文件有逻辑问题,不会改-_-)

免责声明:文章转载自《.NET新手系列(八)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CSRF攻击实验 ——合天网安实验室学习笔记常用数据清洗方法大盘点下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

聊聊MySQL、HBase、ES的特点和区别(转载http://www.360doc.com/content/17/0703/08/44827304_668358202.shtml)

互联网时代各种存储框架层出不穷,眼花缭乱,比如传统的关系型数据库:Oracle、MySQL;新兴的NoSQL:HBase、Cassandra、Redis;全文检索框架:ES、Solr等。如何为自己的业务选取合适的存储方案,相信大家都思考过这个问题,本文简单聊聊我对MySQL、HBase、ES的理解,希望能和大家一起探讨进步,有不对的地方还请指出。 MySQ...

存储过程中SELECT INTO的使用

在MySQL存储过程中使用SELECT …INTO语句为变量赋值:   用来将查询返回的一行的各个列值保存到局部变量中。 要求:   查询的结果集中只能有1行。 SELECT col_name[,...] INTO var_name[,...] table_expr 使用SELECT …INTO语句在数据库中进行查询,并将得到的结果赋值给变量。   ①co...

Linux配置Mysql的主备搭建

前提声明:linux为redhat7.5,mysql为5.7.33      主机IP(Master):192.168.122.131         从机IP(Slave):192.168.122.132 mysql安装包链接和操作文档: 链接:https://pan.baidu.com/s/1dJX2NZ0Gc8fn_BQIRS8aSQ提取码:1234...

mysql 使用group by之后返回的总条数问题

标签一共有三级。 原本产品只与三级标签关联。 这样的话根据一级标签就搜索不到产品。 因为客户要求点击一级标签或二级标签要能搜出三级标签的产品,所以后台做了处理,把产品与一级二级标签都进行了关联,所以导致产品与标签不是一对一的关系,变成一对多的关系,所以用左连接查询会有产品重复的情况。 所以在查询的时候用了mysql的group by,查询的时候根据产品id...

主流列式数据库评测:InfiniDB

)。本文测试的InfiniDB版本是2010年12月20日发布的2.02版,下载文件名分别为InfiniDB64-2.0.2-2.exe 和InfiniDB64-ent-2.0.2-2.exe。安装文件大约在30兆字节。32位最新版只提供了InfiniDB社区版,企业版只有64位,包括Windows和Linux平台。   64位InfiniDB在Windo...

Mysql 修改默认端口

Mysql修改默认端口         0~1023端口为计算机公认端口(Well Known Ports),它们紧密绑定(binding)于一些服务。通常这些端口的通讯明确表明了某种服务的协议。         其他端口可用于自定义端口,但事先需要明确该端口是否被占用。         mysql默认端口为3306,有时候我们需要修改端口,这个时候可以在...