C#开发中可能会用到的一些小贴士(转)
转至http://www.cnblogs.com/Ebony-Ivory/p/4380106.html
C#篇:
1、目标平台的选择
64位操作系统在编译VS里的程序时,根据需要设置项目属性的“目标平台”为x86。如果设置为AnyCPU,则在VS 2005里面是不能“编辑并继续”的。

——在选择x86和AnyCPU都可以在32位操作系统上使用。
——选择x86在64位服务器上运行,可能会造成类库无法加载的问题。此问题在后文IIS经验中解释。
2、取DataTable或者DataGridView里面值的两种常用方法:
dt.Rows[i].Cells["ID"].Value.ToString();
dt.Rows[0]["Name"].ToString();
前者需要从Value中取值,使用起来不是太方便。后者且不能加Value。
——所有的中括号中都可以使用序号(从0开始)或是字段名(列名、行名)
3、如果没有使用Linq(一直都用的2.0框架……),可以使用此法来写执行SQL。如:
string strSQL = string.Format("Insert table_1 values('{0}', '{1}',{2},{3})"
如果是varchar类型,必须使用'';如果是int,目前发现既可使用''也可以不使用,往往写脚本,嫌麻烦,就都带上了'',貌似执行上不会有问题,但不知道性能会不会有所下降。如果有知道的朋友请在评论区说下咯。
——有朋友评论说这个容易被注入式攻击。查了下避免注入式攻击的方法:1、使用存储过程;2、参数化SQL语句。
——以下是使用参数化SQL语句的方式:
SqlCommand command = new SqlCommand("select * from UserInfo where sex=@sex and age>@age", connection);
SqlParameter parameter = new SqlParameter("@age", SqlDbType.Int);//注意UserInfo表里age字段是int类型的
parameter.Value = 30;
command.Parameters.Add(parameter);//添加参数
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
C#开发中可能会用到的一些小贴士(转)的更多相关文章
- 开发中可能会用到的几个 jQuery 小提示和技巧
今天,我们将分享一些很有用的技巧和窍门给 jQuery 开发人员.jQuery 是最好的 JavaScript 库之一,用于简化动画,事件处理,支持 Ajax 和 HTML 的客户端脚本.网络中有大量 ...
- u3d开发中可能会遇到的设计模式
最近一段时间,面试了一些程序员,当然主要招聘的岗位是Unity3D开发.面试过程中对于三年以上的程序员我都会问其在开发中是否会总结一些常用的设计模式和设计方法,当然目的只是想了解程序员的自我学习情况以 ...
- Cocos开发中可能会遇到的问题
开发中碰到的问题及解决方案: 1:场景工程中没有被依赖关联的图片声音或者其它资源,导出到微信后找不到 有些在场景工程中没有指定而通过代码中动态加载的资源,cocos creator不会导出到发布目 ...
- vue vuex开发中遇到的问题及解决小技巧
1.在vue的开发中,如果使用了vuex,数据的组装,修改时在mutations中,页面是建议修改变量值的,如果强制修改,控制台就会出现错误.如下: 这种错误虽然不会影响结果,但是是vuex不提倡的方 ...
- [转]在ASP.NET开发中容易忽略的2个小问题 Cookie乱码存取异常 和 iframe弹框的login跳转
本文转自:http://www.cnblogs.com/outtamyhead/p/3642729.html 本文地址:http://www.cnblogs.com/outtamyhead/p/364 ...
- 在ASP.NET开发中容易忽略的2个小问题
本文地址:http://www.cnblogs.com/outtamyhead/p/3642729.html,转载需保留本地址. 最近在我的MVC项目中出现了两个非常小,但是往往惹出大麻烦的问题,借中 ...
- 开发中可能会用到的几个 jQuery 小提示和技巧(转)
今天,我们将分享一些很有用的技巧和窍门给 jQuery 开发人员.jQuery 是最好的 JavaScript 库之一,用于简化动画,事件处理,支持 Ajax 和 HTML 的客户端脚本.网络中有大量 ...
- 开发中可能会用到的几个 jQuery 小提示和技巧 (转)
转自:http://www.cnblogs.com/lhb25/p/useful-jquery-tips-and-tricks.html 今天,我们将分享一些很有用的技巧和窍门给 jQuery 开发人 ...
- 开发中可能会用到的几个小tip----QT, pycharm, android, 等
QT: 如果是在windows下开发的话,添加外部库,外部包含头文件路径的时候,要注意用相对路径,或者在项目上右键添加外部库的路径或者头文件路径,否则,会卡在这里开始怀疑人生... 如果是在linux ...
随机推荐
- golang全文搜索--使用sphinx
不多废话,测试环境 `ubuntu 13.10` ## 安装 sudo apt-get install sphinxsearch ## 配置 nano /etc/sphinxsearch/sphinx ...
- SDN论坛看到BW的问题及相关解答
SDN论坛看到BW的问题及相关解答 链接: http://blog.sina.com.cn/s/blog_5c58e3c70100r1ou.html 现在有一个 QUERY 运行十分慢 , 所以我想在 ...
- GitHub上排名前100的iOS开源库介绍(来自github)
主要对当前 GitHub 排名前 100 的项目做一个简单的简介,方便初学者快速了解到当前 Objective-C 在 GitHub 的情况. 若有任何疑问可通过微博@李锦发联系我 项目名称 项目信息 ...
- 论一次iOS面试
最近觉得现在所在公司平台用户量太少,自身技术已经到了一个瓶颈,是时候需要换一个用户量多的平台,好好研究下iOS的性能优化.内存优化等问题了. 所面试的公司由于一些默认的规定,就不多说了,大致是面了一个 ...
- C#中yield return用法分析
这篇文章主要介绍了C#中yield return用法,对比使用yield return与不使用yield return的流程,更直观的分析了yield return的用法,需要的朋友可以参考下. 本文 ...
- Cocos2d-JS项目之二:studio基础控件的使用
在studio里把几个基础控件往场景文件一拖,然后导出json格式的资源文件 逻辑代码如下: var HelloWorldLayer = cc.Layer.extend({ sprite:null, ...
- c2ph
http://bolenot.ru/library/cmd/blcmdl1_c2ph.htm?-c2ph---Linux%E5%91%BD%E4%BB%A4--UNIX%E5%91%BD%E4%BB% ...
- 在自己的对象里实现IEnumerator和IEnumerable
平时工作中我们经常用foreach来迭代一个集合.比如 foreach (Student student in myClass) { Console.WriteLine(student); } 基本所 ...
- Top100Summit全球案例研究峰会第一天总结——云计算和大数据
很荣幸受邀参加Top100Summit全球软件案例研究峰会,这次的大会主题是<技术推动商业变革>,组委会从全国投稿的460多件案例中甄选出100件具有代表价值的案例,进行为期4天的分享,第 ...
- python 字符串相加
我们通过操作符号+来进行字符串的相加,不过建议还是用其他的方式来进行字符串的拼接,这样效率高点. 原因:在循环连接字符串的时候,他每次连接一次,就要重新开辟空间,然后把字符串连接起来,再放入新的空间, ...