摘要: 二分查找法要求被查找的线性表已经排序。每一次查找,按中间索引把表分为左右两部分,通过对比中间值与目标值的大小,决定下一次查找在左表还是右表,直到无法再分割。 1 public static int BinarySearch(string[] datalist, string key)... 阅读全文
posted @ 2014-04-23 15:14 kingsleylam 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 选择排序法的思想是,每次选择数组中最小的一位。实现起来只需要几行代码,时间复杂度是O(N^2)。 1 public static void SelectedSort(string[] datalist) 2 { 3 int minIndex; 4 ... 阅读全文
posted @ 2014-04-23 10:27 kingsleylam 阅读(278) 评论(0) 推荐(0) 编辑
摘要: (本文系张子阳《.net之美》读书笔记,文中多处引用书本内容)流首先简单介绍一下流的概念。流的最主要用途就是与应用程序外部的文件或数据源进行数据交互。考虑将一个TXT文件从D盘拷贝到C盘。它的拷贝过程应该是这样的:源文件在磁盘中,需要建立一个类似管道的东西将文件和内存中的应用程序连接起来,并且将文件按字节发送。创建一个byte[]数组用于存放字节。接下来,在C盘创建目标文件,同样通过一个管道一样的东西,将字节写入管道中,间接地写到文件中去。而流,就是这种管道,或者说起到管道的作用。下面简单学习一下代码: 1 Stream source = new FileStream("D:\\te 阅读全文
posted @ 2014-03-20 22:47 kingsleylam 阅读(756) 评论(0) 推荐(0) 编辑
摘要: 连接数据源Connection对象。Connection对象处于最顶层,是所有数据访问请求的关口。我们通过其暴露的属性进行配置。下面是一段连接字符串的示例。 1 if (string.IsNullOrEmpty(con.ConnectionString)) 2 { 3 con.ConnectionString = "Data Source=localhost\\sql08; Initial Catalog=ado_test;user ID=sa;password=test;";// Integrated Security=SSPI 4 ... 阅读全文
posted @ 2014-03-15 12:26 kingsleylam 阅读(586) 评论(0) 推荐(1) 编辑
摘要: 层级关系:server.database.schema.object客户端通过实例连接数据库。sql server使用实例时,需使用登录名(如默认的sa)。一个登录名可以映射到多个数据库的用户名,而用户可以拥有不同的架构,但架构只能有一个拥有者,包括用户和角色等。因此,登录后要指定使用哪个数据库。指定之后就以对应的用户名进行操作。例如登录名test_login,映射到table1的a用户(只能映射数据库的一个用户,但可以映射多个数据库),那么当你使用test_login登录之后就可以指定使用table1数据库,然后以以a用户的身份操作数据库了。而a用户又会有相应的架构,如果使用对象时没有指定哪 阅读全文
posted @ 2014-01-09 23:41 kingsleylam 阅读(685) 评论(0) 推荐(0) 编辑
摘要: private static int SortUnit(int[] datalist, int low, int high) { int key = datalist[low];//把第一个数当作基准数 while (low = key)//先从高往低找,找到比基准数小的,就把它赋给较小下标的,如果是第一次查找,因为较小下标的数已经当成基准数,所以直接覆盖不会造成数据丢失,如果不是第一次查找,在上次循环较小下标的数据也已做了复制 high--; datalist[low... 阅读全文
posted @ 2013-12-29 22:24 kingsleylam 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 配置好IIS服务之后,在浏览器打开localhost:xx【端口号】,提示:无法识别属性 targetFramework=4.0这是因为项目是4.0框架,配置IIS时,在应用程序池没有选择.net 4.0的原因。如果应用程序池里没有.net 4.0,那就是因为没有把框架注册到IIS上。操作方法:找到框架的路径,一般情况下在C:\Windows\Microsoft.NET\Framework 找到相应的版本(如路径为C:\Windows\Microsoft.NET\Framework\v4.0.30319),在cmd中输入如下命令:aspnet_regiis -i;就可以注册了,如下图:此时打开 阅读全文
posted @ 2013-12-26 20:06 kingsleylam 阅读(1689) 评论(0) 推荐(0) 编辑
摘要: 使用order by排序,有时候不是根据字符或数字顺序,而是根据实际要求排序。例如有客户A,B,C,我希望排序结果是B,C,A,那么就要通过自定义的规则排序。第一种方法,可以构造一张映射表,将客户映射到所需要的顺序。第二种方法,如果要排序的客户不多,可以直接写出,那就使用如下方法:order by case customer when B then 1 when C then 2 when A then 3 end;这样就可以排出B,C,A的顺序了。 阅读全文
posted @ 2013-12-21 12:51 kingsleylam 阅读(6150) 评论(0) 推荐(1) 编辑
摘要: 批量SQL包括:FORALL语句BULK COLLECT子句FORALL语句FORALL具有如下结构:FORALL loop_counter IN bounds_clause [SAVE ECEPTIONS]SQL_STATEMENT;其中, bounds_clause是下面形式之一:lower_limit .. upper_limitINDICES OF collection_name [BETWEEN lower_limit .. upper_limit]VALUES OF collection_name第一种与for循环一样。第二种用于稀疏数组,比如一个嵌套表,删除了其中某几项,遍历时会 阅读全文
posted @ 2013-08-31 16:49 kingsleylam 阅读(435) 评论(0) 推荐(0) 编辑
摘要: 关于PL/SQL中这三种数组的介绍,不想写了。转一篇日志吧……链接:http://www.blogjava.net/decode360/archive/2008/08/08/280825.html作者:decode360补充一点:假如从first到last的遍历过程中,存在被删除的占位符,如果使用则会报错。可用Exists(下标)的方法来判断是否存在。不能用is null 来判断……记录类型不能整体用null判断,我能想到并测试成功的方法是判断里面的NOT NULL字段(推荐主键)是否为null。PLSQL学习(二) 数组专题 PLSQL中提供了三种数据的形式,功能还是比较强大的。但是总的来说 阅读全文
posted @ 2013-08-28 00:13 kingsleylam 阅读(1528) 评论(0) 推荐(0) 编辑
摘要: 在使用select into 为变量赋值时,如果变量是集合类型,不会产生异常,而如果是基本类型或记录类型,则会报异常。异常产生了怎么办?当然是捕获并处理啦。对于普通的代码块来说,在代码块的结尾处理就可以了。但是在循环里面呢?根据异常的传播,产生异常程序会中止。但如果想要在发生异常后,达到continue的效果,可不能在结尾的exception那里添加when others then continue;的语句,否则报错。要达到在循环中,找不到数据就continue,可以在赋值时,no_data_found的情况下作异常处理。即是让赋值语句包含在begin exception end的结构中。另外 阅读全文
posted @ 2013-08-27 10:33 kingsleylam 阅读(1055) 评论(0) 推荐(0) 编辑
摘要: 在PL/SQL代码块中使用select into 赋值的话,有可能返回的是一个结果集。此时,如果使用基本类型或自定义的记录类型,将会报错。因此,需要定义一个变量,是某种类型的集合。下面以一个基于表的行类型的集合为例简单介绍一下(相信基本类型同理吧)。 1 DECLARE 2 CURSOR cur_tx IS SELECT GKEY from t ; 3 SUBTYPE TX_TYPE IS t%ROWTYPE ; -- 定义类型 4 TYPE TX_TAB IS TABLE OF TX_TYPE;--定义新类型,是某个类型的集合 5 K t.GKEY%TYPE... 阅读全文
posted @ 2013-08-27 00:19 kingsleylam 阅读(10417) 评论(0) 推荐(0) 编辑
摘要: 与公司同事交流了一下,得知触发器很少用。性能是一方面,主要是如果用太多触发器,可能到时你都不知道会有什么操作自动发生。有些操作可以在程序中控制。例如在插入某个表时,写个log表的记录。这可以用触发器实现,但比较好的做法还是在程序中写个插入到log的语句实现。所以,就只学习了很简单的部分。触发器的通用语法如下:CREATE [OR REPLACE] TRIGGER Trigger_name{BEFORE | AFTER } {INSERT | DELETE | UPDATE} ON TABLE_NAME[FOR EACH ROW][FOLLOWS another_trigger][ENABLE 阅读全文
posted @ 2013-08-26 23:39 kingsleylam 阅读(444) 评论(0) 推荐(0) 编辑
摘要: 显式游标的处理过程包括:声明游标,打开游标,检索游标,关闭游标。声明游标CURSOR c_cursor_name IS statement;游标相当于一个查询结果集,将查询的结果放在游标里,方便在块里进行处理。记录一个记录就是一个复合的数据结构,相当于结果集里的一行数据,用于遍历游标时存放结果。记录支持三种定义:基于表,基于游标,自定义。如果是基于表或游标,其定义格式为:record_name table_name or cursor_name%ROWTYPE;打开游标OPEN cursor_name;检索游标存在两种游标检索方式:FETCH cursor_name INTO pl/sql v 阅读全文
posted @ 2013-08-14 00:14 kingsleylam 阅读(3049) 评论(0) 推荐(0) 编辑
摘要: 做好了准备想要接受难一点的概念,结果发现,其实这一章很水。1. raise_application_errorraise_application_error 是Oracle提供的一种特殊的内置过程,允许程序员为特定应用程序创建有意义的错误消息,也即自定义。语法如下:raise_application_error(error_number,error_message);orraise_application_error(error_number,error_message,keep_errors);error_number是与特定错误消息相关联的错误编号,这个编号的范围在-20999到-2000 阅读全文
posted @ 2013-04-19 00:44 kingsleylam 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 今晚看了关于PL/SQL异常传播的内容,做个笔记。1.PL/SQL执行语句块发生运行时错误PL/SQL 语句块的可执行部分发生某个运行时错误,执行权会转到该语句块的异常处理部分。当与该异常相关的语句执行完毕之后,执行权会转到主机环境或者外围语句块。如果不存在该错误的异常处理程序,该异常就会被传播到外围语句块,然后再次执行刚才所描述的步骤。如果没有发现异常处理程序,则程序执行会终止,执行权会转到主机环境。请看下例: 1 begin 2 declare 3 a number := 4; 4 b number := 0; 5 begin 6 a := a/b; 7 ... 阅读全文
posted @ 2013-04-17 00:37 kingsleylam 阅读(453) 评论(0) 推荐(0) 编辑
摘要: 对于pl/sql接触也有大半年,但是居然一点也没去学,写SQL还停留在简单的连接之类的语句,这怎么行?当然得自学啦。不过自学也要有配套的设备。我的想法是在VMware虚拟机中安装XP系统,再在XP系统中安装Oracle服务端。由于在物理机已经安装plsql 和 oracle客户端,所以到时确保两台机器联网,就可以通过配置tnsnames.ora文件来实现连接了。首先要创建一个新虚拟机,过程略(见到这个是不是想到了以前读书时抄答案时看到这个字的悲愤心情,内心有无数头草泥马呼啸而过?不过不要紧,这个安装很简单的,只要确保是以桥接的方式设置网络就可以了)。其次是安装XP,过程,再次,略……接着安装O 阅读全文
posted @ 2013-04-02 23:57 kingsleylam 阅读(318) 评论(0) 推荐(0) 编辑
摘要: 问题1:DataGridView绑定DataTable之后,在界面排序,选择若干行,此时选中的行的index与DataTable中的index不一致,这样若想要对其对应的行进行修改操作,将会造成错误。Sol: 首先将选中的DataGridView行的DataBoundItem属性转换为DataRowView, 然后通过对应的DataTable中的取出索引。1 DataRowView drv = dataGridView.SelectedRows[0].DataBoundItem as DataRowView;2 int index = dataTable.Rows.IndexOf(drv.Ro 阅读全文
posted @ 2013-03-12 00:13 kingsleylam 阅读(1798) 评论(0) 推荐(0) 编辑
摘要: 最近遇到如何将输入在组合框(ComboBox)中的英文字符转换为大写的问题。在TextBox中,有CharacterCasing属性,直接设置为Upper即可。但是在ComboBox中没有此属性,所以要另找其他方法。直觉告诉我,一定是在KeyDown, KeyPress, KeyUp这三个事件中找到突破口,研究下去果然如此。三者触发的前后顺序如上所示,KeyDown和KeyPress,字符接收,未赋值到文本框里,而KeyUp的时候已经赋值了,所以应该从前两者入手。KeyDown里,提供有KeyValue, KeyData, KeyCode,第一个是整型数,后两个返回Keys 枚举类型。且三者都 阅读全文
posted @ 2013-03-11 23:47 kingsleylam 阅读(2136) 评论(0) 推荐(0) 编辑
摘要: 动态链接库(DLL,Dynamic Link Library)和程序都属于程序集(Assembly)。C#编译器只是将C#代码转换成公共中间语言(Common Intermediate Language, CIL),VES(Virtual Execution System 虚拟执行系统,也称运行时)将CIL编译成机器码,这个过程称为即时编译(JT编译,Just-in-Time)。这些代码称为托管代码(Managed Code)。在数值范围内,decimal数字表示的十进制数都是完全准确的,因为其基数是十进制的。浮点数是基于二进制的,所以有误差。可以在数值最后加上m,表示decimal类型,加f 阅读全文
posted @ 2013-01-11 00:22 kingsleylam 阅读(454) 评论(0) 推荐(0) 编辑