前言:

下个月就要去进行Java开发了,以后C#碰的就少了(可惜去年买了三本C#的书,几乎还是全新的……),平时一些经验都记在OneNote里面,现在收集整理出来,因为只能利用交接工作的打酱油的时间,暂时没什么排版,陆续更新中……

里面的经验基本上都是比较初级的,是在进行开发工作中很可能遇到的问题~很多都是个人总结,搜集,肯定有些不合理甚至错误的东西,望不吝指正。

2015年4月1日17:52:17

基本更新完成,还有部分内容记载具体的项目经验中,还需要筛选下……

C#篇:

1、目标平台的选择

64位操作系统在编译VS里的程序时,根据需要设置项目属性的“目标平台”为x86。如果设置为AnyCPU,则在VS 2005里面是不能“编辑并继续”的。

——在选择x86和AnyCPU都可以在32位操作系统上使用。

——选择x86在64位服务器上运行,可能会造成类库无法加载的问题。此问题在后文IIS经验中解释。

2、取DataTable或者DataGridView里面值的两种常用方法:

  1. dt.Rows[i].Cells["ID"].Value.ToString();
  2. dt.Rows[0]["Name"].ToString();

前者需要从Value中取值,使用起来不是太方便。后者且不能加Value。

——所有的中括号中都可以使用序号(从0开始)或是字段名(列名、行名)

3、如果没有使用Linq(一直都用的2.0框架……),可以使用此法来写执行SQL。如:

  1. string strSQL = string.Format("Insert table_1 values('{0}', '{1}',{2},{3})"

如果是varchar类型,必须使用'';如果是int,目前发现既可使用''也可以不使用,往往写脚本,嫌麻烦,就都带上了'',貌似执行上不会有问题,但不知道性能会不会有所下降。如果有知道的朋友请在评论区说下咯。

——有朋友评论说这个容易被注入式攻击。查了下避免注入式攻击的方法:1、使用存储过程;2、参数化SQL语句。

——以下是使用参数化SQL语句的方式:

  1. SqlCommand command = new SqlCommand("select * from UserInfo where sex=@sex and age>@age", connection);
  2. SqlParameter parameter = new SqlParameter("@age", SqlDbType.Int);//注意UserInfo表里age字段是int类型的
  3. parameter.Value = 30;
  4. command.Parameters.Add(parameter);//添加参数
  5. SqlDataAdapter adapter = new SqlDataAdapter(command);

4、DLL引用了,但是在代码里面还是无法调用。

尝试在DLL的属性里面设置使用特定版本为False。

5、类库里的方法在调用的时候,如何让方法上面显示自定义说明?

勾选一下项目:属性——生成——XML文档文件

——使用类库的时候,把对应的XML也拷贝的相同目录,这样会在VS中看到类库函数的自定义说明。前提是代码里面使用“///”生成注释。

6、博友分享:VS2010在新建.net 4.0项目时,经常会默认一个Clent Profile的东东,经常出现问题。。。切换为标准框架即可。

VS2005不存在这个问题,VS2013好像也不存在这个问题。

7、未能加载程序集

这个问题的范畴过于庞大,能够造成这方面问题的原因可能有很多,我记得比较分散,后面找到了陆续补充。

(1)版本不匹配。

(2)类库生成x86还是x64还是AnyCPU,最好能够做到目标平台保持一致。

(3)两个项目引用路径不同,或生成个路径不同。

8、***.dll标记为系统必备,必须对其进行强签名。

(1)首先,参考这个地方。http://blog.csdn.net/qiujiahao/article/details/2775262;

(2)其次,出现这个问题,很有可能是因为两个项目调用了相同的DLL,但是两个DLL版本不同,需要使这两个版本相同即可。

9、如何把Console程序修改为WinForm程序。

(1)修改Program.cs,按照Winform程序的方式来修改即可。

(2)修改应用程序的属性,在应用程序——输出类型中修改为Windows应用程序。

10、DataGridView在使用其单击、双击事件时,如果需要使用RowIndex,需要判断其是否小于0(表头),否则会报错。

11、当多个窗体都设置了TopMost,则只有最先设置的窗体在顶层。

12、引用了DLL,但是编译的时候还是提示没有找到命名空间。

背景:这个问题很坑,很难发现问题所在。如一个解决方案中有项目A,生成类库,testA.dll;还有项目B,生成类库,testB.dll。如果项目B的程序集名称和默认命名空间设置成了testA,则编译不会报错,但是你这时候想调用testB中的方法时,会发现根本找不到,全是testA的方法!

解决办法:右键查看项目(也有可能是相关项目)的程序集名称和默认命名空间。是否与类库名称一致。

13、如何修改VS2008转化后的项目为2005版。

如上图:修改第一行Format Version 为9.00.修改第二行为Visual Studio 2005。

14、DataGridView时间格式设置

dataGridView1.Columns[n].DefaultCellStyle.Format = "yyyy-MM-dd";

15、当前不会命中断点。源代码与原始版本不同问题的解决方法

坑到爆的问题来了……这个问题出现大多是因为混乱的项目引用。以下提供几个可能有用的解决方案:

方案一:在VS菜单的生成中,选择“清理解决方案”,然后重新生成解决方案。

方案二:实际上有比这个办法更好的办法,就是将出问题的文件用notepad打开,然后另存为Unicode编码,覆盖原来的文件。

方案三:通过重新格式化出问题的源文件亦可以解决,即在VS2005中选择 “编辑”——〉“高级”——〉“设置选定内容的格式”。

以上三个方案参考自:http://blog.csdn.net/zztoll/article/details/6688949

实际上我都用了,没用!

最后解决办法的:

根据分析,以及这篇文章的内容,出现此问题是因为我直接引用了DLL,而不是直接引用项目。DLL还未重新编译的时候,直接运行了程序,则造成DLL内容还没有更新,调试无法运行到断点。

16、float 、double和decimal的区别

#region

float 单精度浮点 32bit,

double 双精度浮点64bit,

decimal是高精度 128bit,浮点型。

float double 是 基本类型(primitive type),decimal不是。

float 有效数字7位,范围  ±1.5 × 10E−45 to ±3.4 × 10E38

double 有效数字15/16 位,范围 ±5.0 × 10 E−324 to ±1.7 × 10E308

decimal 有效数字 28/29 位,范围 ±1.0 × 10E−28 to ±7.9 × 10E28( E -- 下接几次方)

decimal的有效位数很大,达到了128位,但是表示的数据范围却比float和double类型小。

使用的时候会对计算时的性能有影响。

常数写法:

float f = 12.3F;  (带F)

double x=12.3;  (不带就是double)

decimal d = 12.30M; (带M)

浮点数运算会有精度损失问题,有精度损失时程序不会报告,要程序员自己注意。

#endregion

17、如何清空StringBuilder

1、Remove例:

StringBuilder val = new StringBuilder();

val.Append("....");

val.Remove(0,val.Length);//清空

2、Replace

StringBuilder val = new StringBuilder();

val.Append("....");

val.Replace(val.ToString(), "");//清空

3、Length

StringBuilder val = new StringBuilder();

val.Append("....");

val.Length = 0;//清空经过测试第三种效率更高,推荐用第三种!

SQL篇

1、有关SQL中Join的问题。

当left join的那个表(子表),on的字段存在两条,那么查询出来的结果会分为两条。

——所以对于子表内容掌控不准确,很可能会查询出不符合需求的结果。

例子:

(1)两个表的内容是

(2)left join的结果

2、同一张表可以Left Join两次

——比如主表A为大扫除任务安排表,其中包含“扫地的学生ID”,“倒垃圾的学生ID”,可以通过两次关联学生信息表B,来在主表中查询出学生姓名。

——以下例子与上面的举例无关。仅供参考。

3、Union的时候,如果对应的两个字段类型不同,必须进行转换,否则会出错。

如上图convert。注意使用union all可以显著提高速度,这样的话,不会对查询结果进行排序。

4、SQL Server中链接服务器的使用方法

应用背景:应用软件包含多个数据库服务器,但是某个查询需要从两个数据库服务器的数据库中查询数据的。

使用说明:

(1)添加一个链接服务器。

exec sp_addlinkedserver @server='serverontest',@provider='sqloledb',@srvproduct='',@datasrc='101.123.10.112'

(2)添加登录方式

EXEC sp_addlinkedsrvlogin @rmtsrvname = 'serverontest', @useself = 'false', @locallogin = 'sa', @rmtuser = 'sa', @rmtpassword = 'passwordofsa'

(3)以上两个语句中,@server为服务器的别名,@datasrc为要链接的目标数据库的连接串,@rmtsrvname为别名,@locallogin为本地登录的用户名,@rmtuser和@rmtpassword为要链接的目标数据库的登录用户名和密码。

(4)添加完链接服务器之后,可以通过select * from sys.linked_logins 和 select * from sys.servers来查看已经添加的链接服务器和登录角色。

(5)添加完链接服务器后,使用select * from 别名.库名.dbo.表名 来对其中的数据进行查询。

(6)删除链接服务器登录映射和链接服务器的方法:

  exec sp_droplinkedsrvlogin ’serverontest’ ,’sa’

  exec sp_dropserver ’serverontest’

思想以及设计理念:

1、逻辑删除与物理删除的概念?

物理删除时真正的删除了,逻辑删除还保留数据在数据库中的位置,但是修改其删除标志为已删除状态(貌似这个在大学里面就学了……)

2、在UI层(用户操作界面),如果出错了,或者操作失败了,应该提醒用户下一步应该做什么。

如:当用户进行操作B的时候,需要先开启选项A。设当前选项A为关闭状态,用户进行操作B,此时应提示:“操作失败,选项A未启用,请到XXX设置中开启选项A”。在某些应用中,甚至可以增加直接跳转到设置的地方,或者直接修改设置。根据需要而定。

——提醒用户改做什么,个人认为是应该的,体现友好度。但是不应该把代码中具体的异常暴露出来,具体异常应该记录日志,并使用异常编码,在文档中、代码中管理起来。

3、当可以确定两份程序完全一致,但是怎么运行结果都不一致,先检查配置文件是否不同。

4、如何查看进程的端口号。

命令行输入:netstat -ano

5、如何使用命令行安装Windows服务

%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\installutil.exe E:\myService\ServiceTest.exe

Net Start ServiceTest

sc config ServiceTest start= auto

前提是,你所要安装的服务,所在路径不能包含空格。如常见的Program Files,就会造成安装失败。

如果安装的时候,命令行窗口一闪而过没有看到什么情况,可以自行在命令提示符里面执行以上的脚本以查看报错。或者在结尾加上pause

PS:一个一直支撑我的宝贵经验:

哈佛有一个著名的理论:人的差别在于业余时间,而一个人的命运决定于晚上8点到10点之间。每晚抽出2个小时的时间用来阅读、进修、思考或参加有意的演讲、讨论,你会发现,你的人生正在发生改变,坚持数年之后,成功会向你招手。

一些可能有点用处的C#开发经验的更多相关文章

  1. [转]Linux 的多线程编程的高效开发经验

    Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别.不注意这些 Linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断.本文中我们 ...

  2. Linux 的多线程编程的高效开发经验(转)

    http://www.ibm.com/developerworks/cn/linux/l-cn-mthreadps/ 背景 Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多 ...

  3. Linux 的多线程编程的高效开发经验

    http://www.ibm.com/developerworks/cn/linux/l-cn-mthreadps/ 背景 Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多 ...

  4. 【repost】document.write的用处

    document.write的用处 document.write是JavaScript中对document.open所开启的文档流(document stream操作的API方法,它能够直接在文档流中 ...

  5. 【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处

    (转自:http://blog.csdn.net/reille/article/details/7161942) 作者:reille 本博客网址:http://blog.csdn.net/reille ...

  6. 使用angular中ng-repeat , track by的用处

    我们见到最简单的例子是: <div ng-repeat="link in links" ></div> 如果item的值有重复的,比如links=[&quo ...

  7. github的pull request是指什么意思?有什么用处

    github的pull request是指什么意思? 来看看某乎某位阿牛的理解,多么的简单粗暴! 我尝试用类比的方法来解释一下 pull reqeust.想想我们中学考试,老师改卷的场景吧.你做的试卷 ...

  8. Docker对普通开发者的用处(转)

    有些开发者可能还是不明白 Docker 对自己到底有多大的用处,因此翻译 Docker 个人用例 这篇文章中来介绍 Docker 在普通开发者开发过程中的用例. Docker 如今赢得了许多关注,很多 ...

  9. java中的反射机制在Android开发中的用处

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...

随机推荐

  1. 课堂练习:HTML-----------一般标签、常用标签

    []练习:一般标签.常用标签 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...

  2. 2018.11.1 Hibernate中的Mapper关系映射文件

    Customer.hbm.xml 基本的参数都在里面了 <?xml version="1.0" encoding="UTF-8"?> <!DO ...

  3. ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(五) 补充:历史记录 和 消息提醒

    有开发者提问怎么做历史记录功能和即使不打开聊天窗口有消息提醒功能.简单抽时间写了点代码.不过只是基本思路,具体细节没有实现. 正如前几篇博客中提到的,读取历史记录什么时候读取呢?按照常理,应该是打开聊 ...

  4. Batch Normalization:Accelerating Deep Network Training by Reducing Internal Covariate Shift(BN)

    internal covariate shift(ics):训练深度神经网络是复杂的,因为在训练过程中,每层的输入分布会随着之前层的参数变化而发生变化.所以训练需要更小的学习速度和careful参数初 ...

  5. linux 学习(三) php相关

    五 php相关 配置文件位置 /etc/apache2/apache2.conf 1禁止列举目录 sudo vi /etc/apache2/sites-enabled/000-default 删除Op ...

  6. linux命令进阶及和windows进行文件传输的所有方式

    1.图例 ------>原图出处 2. 结构图 根目录说明 3.linux相关命令 cd(change directory切换目录): cd /. 进入根目录 cd .. 返回上一次目录 cd ...

  7. 经验之谈—控制器的view的显示

    经验之谈—控制器的view的显示 开发中,我们经常需要将一个控制器的view添加到另一个控制器的view上,这种效果是我们期望看到的,但是里边隐藏着一些细节,不注意的话,可能会达不到我们想到的效果. ...

  8. Navicat for Mysql修改MySQL数据库密码,图文详解

    1.创建一个连接 2.打开连接 3.按照图示123依次点击 4.输入新密码 5.查看实现修改密码功能的SQL语句(此步骤非必须) 6.最关键的一步:点击保存 7.出现如下现象,恭喜你,修改密码成功! ...

  9. fabricjs 的用途

    使用html5 的canvas画板做一些图片旋转,拖动,放大,缩小和合成图片的功能,有没有一个集成好的组件库呢?答案肯定是有的,而且还不止我前面提到的功能,下面介绍一下我使用的fabricjs. 官网 ...

  10. 仿LordPE获取PE结构

    乍一看LordPE一个小工具一般般,真的动手做起来才知道技术含量高的很. 当前只是获取到PE结构并打印,仅此而已. PE.h #pragma once #include <stdio.h> ...