前言:程序员
下个月就要去进行Java开发了,之后C#碰的就少了(惋惜去年买了三本C#的书,几乎仍是全新的……),平时一些经验都记在OneNote里面,如今收集整理出来,由于只能利用交接工做的打酱油的时间,暂时没什么排版,陆续更新中……sql
里面的经验基本上都是比较初级的,是在进行开发工做中极可能遇到的问题~不少都是我的总结,搜集,确定有些不合理甚至错误的东西,望不吝指正。数据库
2015年4月1日17:52:17服务器
基本更新完成,还有部份内容记载具体的项目经验中,还须要筛选下……框架
64位操做系统在编译VS里的程序时,根据须要设置项目属性的“目标平台”为x86。若是设置为AnyCPU,则在VS 2005里面是不能“编辑并继续”的。ide
——在选择x86和AnyCPU均可以在32位操做系统上使用。函数
——选择x86在64位服务器上运行,可能会形成类库没法加载的问题。此问题在后文IIS经验中解释。性能
dt.Rows[i].Cells["ID"].Value.ToString(); dt.Rows[0]["Name"].ToString();
前者须要从Value中取值,使用起来不是太方便。后者且不能加Value。测试
——全部的中括号中均可以使用序号(从0开始)或是字段名(列名、行名)ui
string strSQL = string.Format("Insert table_1 values('{0}', '{1}',{2},{3})"
若是是varchar类型,必须使用'';若是是int,目前发现既可以使用''也能够不使用,每每写脚本,嫌麻烦,就都带上了'',貌似执行上不会有问题,但不知道性能会不会有所降低。若是有知道的朋友请在评论区说下咯。
——有朋友评论说这个容易被注入式攻击。查了下避免注入式攻击的方法:一、使用存储过程;二、参数化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);
尝试在DLL的属性里面设置使用特定版本为False。
勾选一下项目:属性——生成——XML文档文件
——使用类库的时候,把对应的XML也拷贝的相同目录,这样会在VS中看到类库函数的自定义说明。前提是代码里面使用“///”生成注释。
VS2005不存在这个问题,VS2013好像也不存在这个问题。
这个问题的范畴过于庞大,可以形成这方面问题的缘由可能有不少,我记得比较分散,后面找到了陆续补充。
(1)版本不匹配。
(2)类库生成x86仍是x64仍是AnyCPU,最好可以作到目标平台保持一致。
(3)两个项目引用路径不一样,或生成个路径不一样。
(1)首先,参考这个地方。http://blog.csdn.net/qiujiahao/article/details/2775262;
(2)其次,出现这个问题,颇有多是由于两个项目调用了相同的DLL,可是两个DLL版本不一样,须要使这两个版本相同便可。
(1)修改Program.cs,按照Winform程序的方式来修改便可。
(2)修改应用程序的属性,在应用程序——输出类型中修改成Windows应用程序。
背景:这个问题很坑,很难发现问题所在。如一个解决方案中有项目A,生成类库,testA.dll;还有项目B,生成类库,testB.dll。若是项目B的程序集名称和默认命名空间设置成了testA,则编译不会报错,可是你这时候想调用testB中的方法时,会发现根本找不到,全是testA的方法!
解决办法:右键查看项目(也有多是相关项目)的程序集名称和默认命名空间。是否与类库名称一致。
如上图:修改第一行Format Version 为9.00.修改第二行为Visual Studio 2005。
dataGridView1.Columns[n].DefaultCellStyle.Format = "yyyy-MM-dd";
坑到爆的问题来了……这个问题出现大可能是由于混乱的项目引用。如下提供几个可能有用的解决方案:
方案一:在VS菜单的生成中,选择“清理解决方案”,而后从新生成解决方案。
方案二:实际上有比这个办法更好的办法,就是将出问题的文件用notepad打开,而后另存为Unicode编码,覆盖原来的文件。
方案三:经过从新格式化出问题的源文件亦能够解决,即在VS2005中选择 “编辑”——〉“高级”——〉“设置选定内容的格式”。
以上三个方案参考自:http://blog.csdn.net/zztoll/article/details/6688949
实际上我都用了,没用!
最后解决办法的:
根据分析,以及这篇文章的内容,出现此问题是由于我直接引用了DLL,而不是直接引用项目。DLL还未从新编译的时候,直接运行了程序,则形成DLL内容尚未更新,调试没法运行到断点。
#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
一、Remove例:
StringBuilder val = new StringBuilder();
val.Append("....");
val.Remove(0,val.Length);//清空
二、Replace
StringBuilder val = new StringBuilder();
val.Append("....");
val.Replace(val.ToString(), "");//清空
三、Length
StringBuilder val = new StringBuilder();
val.Append("....");
val.Length = 0;//清空通过测试第三种效率更高,推荐用第三种!
当left join的那个表(子表),on的字段存在两条,那么查询出来的结果会分为两条。
——因此对于子表内容掌控不许确,极可能会查询出不符合需求的结果。
例子:
(1)两个表的内容是
(2)left join的结果
——好比主表A为大扫除任务安排表,其中包含“扫地的学生ID”,“倒垃圾的学生ID”,能够经过两次关联学生信息表B,来在主表中查询出学生姓名。
——如下例子与上面的举例无关。仅供参考。
如上图convert。注意使用union all能够显著提升速度,这样的话,不会对查询结果进行排序。
应用背景:应用软件包含多个数据库服务器,可是某个查询须要从两个数据库服务器的数据库中查询数据的。
使用说明:
(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’
物理删除时真正的删除了,逻辑删除还保留数据在数据库中的位置,可是修改其删除标志为已删除状态(貌似这个在大学里面就学了……)
如:当用户进行操做B的时候,须要先开启选项A。设当前选项A为关闭状态,用户进行操做B,此时应提示:“操做失败,选项A未启用,请到XXX设置中开启选项A”。在某些应用中,甚至能够增长直接跳转到设置的地方,或者直接修改设置。根据须要而定。
——提醒用户改作什么,我的认为是应该的,体现友好度。可是不该该把代码中具体的异常暴露出来,具体异常应该记录日志,并使用异常编码,在文档中、代码中管理起来。
命令行输入:netstat -ano
%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个小时的时间用来阅读、进修、思考或参加有意的演讲、讨论,你会发现,你的人生正在发生改变,坚持数年以后,成功会向你招手。