VBNET2008连接Oracle增删改查学习笔记(经典CRUD_含存储过程)
- 格式:doc
- 大小:84.50 KB
- 文档页数:7
VS2008C#Sqlserver2008数据库的连接以及增删改查using System.Data.SqlClient;SqlConnection conn;//连接数据库private void Form1_Load(object sender, EventArgs e){string constr = "server=ACER-PC\\LI;database=db_test;uid=sa;pwd=123";conn = new SqlConnection(constr); //数据库连接}查询://这⾥只要连接数据库即可,不必打开数据库private void button1_Click(object sender, EventArgs e){SqlCommand cmd = new SqlCommand("select * from tb_ls", conn);SqlDataAdapter sda = new SqlDataAdapter();sda.SelectCommand = cmd;DataSet ds = new DataSet();sda.Fill(ds, "cs");dataGridView1.DataSource = ds.Tables[0];}删除:private void button2_Click(object sender, EventArgs e){if (this.dataGridView1.SelectedRows.Count > 0){DataRowView drv = dataGridView1.SelectedRows[0].DataBoundItem as DataRowView;drv.Delete();}conn.Open();//打开数据库SqlCommand cmd = new SqlCommand("delete from tb_ls where 编号="+this.dataGridView1.CurrentRow.Cells["编号"].Value+"",conn);cmd.ExecuteNonQuery();conn.Close();//关闭数据库}添加:private void button3_Click(object sender, EventArgs e){conn.Open();SqlCommand cmd = new SqlCommand("insert into tb_ls values('"+textBox1.Text+"','"+textBox2.Text+"','"+textBox3.Text+"','"+textBox4.Text+"')",conn);cmd.ExecuteNonQuery();conn.Close();}更新:private void button4_Click(object sender, EventArgs e){conn.Open();SqlCommand cmd = new SqlCommand("update tb_ls set 姓名='"+textBox2.Text+"',性别='"+textBox3.Text+"',年龄='"+textBox4.Text+"' where 编号='"+textBox1.Text+"'",conn); textBox1.ReadOnly = false;cmd.ExecuteNonQuery();conn.Close();}。
Oracle的基本语法(增删改查)表的操作:创建表:create table 表名(列名属性;);查看表结构:desc 表名;表重命名:rename 原表名 to 新表名;删除表:drop 表名;表的字段操作:增:alter table 表名 add 列名列的属性; --单列操作alter table 表名 add (列名1 列1的属性,列名2 列2的属性,...) --多列操作删: alter table 表名 drop column 列名; --单列操作alter table 表名 drop (列1,列2); --多列操作(多列不需要加column)改:alter table 表名 modify 列名新属性; --单列操作alter table 表名 modify (列名1 列1的新属性,列名2 列2的新属性);--多列操作数据的操作:增:--单⾏操作insert into 表名 values(所有列的信息); --数据类型必须与表结构⾥字段的属性⼀致insert into 表名 values(部分信息); --会按表的字段顺序加⼊信息,后⾯没设置的为null(输⼊数据必须⼩于或等于列数) --多⾏操作insert into 表1select 数据1 from dualunionselect 数据2 from dual; --dual 是⼀张伪表只是为了⽅便操作⽽存在,需要了解的请百度删:delete from 表名 --删除所有数据delete 列名 from 表名 where 条件 --删除符合条件的某些数据删除某⼀列数据(该列必须可以为null):1.update 表名 set 列名=null;2.delete from 表名 where 列名 is not null ;改:update 表名 set 列名=数据 where 条件; --修改满⾜条件的数据update 表名 set 列名=数据; --将该列全部修改查看:select * from 表名; --查看表的全部信息select 列1,列2 from 表名; --查看表的列1,列2信息。
Oracle存储过程的增、删、改、查: Packages: create or replace packageemp_pags is type emp_cour is ref cursor;--定义游标类型的变量emp_cour-- --添加员工-- function saveEmp(e_ename emp.ename%TYPE, e_job emp.job%TYPE, e_sal emp.sal%TYPE, e_deptno emp.deptno%TYPE return integer;--定义返回类型-- --修改员工信息-- function updateEmp(e_empno emp.empno%TYPE, e_enameemp.ename%TYPE, e_job emp.job%TYPE, e_sal emp.sal%TYPE, e_deptnoemp.deptno%TYPE return integer;--定义返回类型-- --删除员工-- function deleteEmp(e_empno emp.empno%TYPE return integer ; --查询全部-- procedure queryAll(emps out emp_cour;--定义一个输出类型的参数emps-- --查询单条-- procedure queryById(e_empno in number,emps out emp_cour;--定义-- --两表查询-- procedure queryJoin(empJoin out emp_cour; end emp_pags; Package bodies: create or replace package body emp_pags is --添加员工-- function saveEmp(e_enameemp.ename%TYPE, e_job emp.job%TYPE, e_sal emp.sal%TYPE, e_deptnoemp.deptno%TYPE return integer is begin insert into emp (empno,ename,job,sal,deptno values (emp_sequence.nextval,e_ename,e_job,e_sal,e_deptno; commit; return 1; exception when others then return 0; end saveEmp; --修改员工信息-- function updateEmp(e_empno emp.empno%TYPE, e_ename emp.ename%TYPE, e_jobemp.job%TYPE, e_sal emp.sal%TYPE, e_deptno emp.deptno%TYPE return integer is begin update emp set ename = e_ename, job = e_job, sal = e_sal, deptno = e_deptno where empno = e_empno; commit; return 1; exception when others then return 0; end updateEmp; --删除员工-- function deleteEmp(e_empno emp.empno%TYPE return integer is begin delete from emp where empno = e_empno; commit; return 1;exception when others then return 0; end deleteEmp; --查询全部-- procedure queryAll(emps out emp_cour is begin open emps for --打开游标-- selectempno,ename,job,sal,deptno from emp; end queryAll; --查询单条-- 定义两个参数,第一个输入,第二个输出 procedure queryById(e_empno in number,emps out emp_cour is begin open emps for--打开游标-- select empno,ename,job,sal,deptno from emp where empno = e_empno; end queryById; --量表查询-- procedure queryJoin(empJoin outemp_couris begin open empJoin for select e.empno,e.ename,e.job,e.sal,d.dname,d.loc from emp e,dept d where e.deptno=d.deptno; end queryJoin; end emp_pags;。
-----创建序列c reate sequ encebook_idIN CREME NT BY 1 --每次加几个START WITH 001-- 从1开始计数NO MAXVA LUE -- 不设置最大值NOC YCLE-- 一直累加,不循环CACHE 10;------创建boo ks表c reate tabl e boo ks(b ooks_id va rchar2(1000),b ooks_namevarch ar2(100),price numb er,q ty nu mber,pubvarch ar2(200));------修改boo ks表的字段alt er ta ble b ooksmodif y(boo ks_id numb er)-------------往b ooks表中插入数据inse rt in to bo oks v alues(book_id.n extva l,'中国文学1',39,12,'人民文学');inser t int o boo ks va lues(book_id.ne xtval,'中国文学2',30,32,'人民文学');i nsert into book s val ues(b ook_i d.nex tval,'中国文学3',59,22,'清华大学');in sertintobooks valu es(bo ok_id.next val,'中国文学4',33,52,'清华大学');ins ert i nto b ooksvalue s(boo k_id.nextv al,'中国文学5',99,62,'电子工业');-----------跟新books中的信息updat e boo ks se t pri ce=100 whe re bo oks_i d=1----------按出版社分组查询每个出版社金额的情况sel ect p ub,su m(pri ce*qt y) fr om bo oks g roupby pu b----------按出版社、书籍名称分组查询每个出版社金额的情况se lectpub,b ooks_name,sum(p rice*qty)frombooks grou p bypub,b ooks_name----------按出版社、书籍名称分组查询每个出版社金额的情况 >50sele ct pu b,boo ks_na me,su m(pri ce*qt y) fr om bo oks g roupby pu b,boo ks_na me ha vingsum(p rice)>50----------查询相同出版社的记录数sel ect p ub,co unt(p ub) f rom b ooksgroup by p ub ha vingcount(pub) >1-----标的内链接sel ect e id ,e name,six,n ame f rom e,d wh ere a.id=d.idselec t eid ,ena me,si x,nam e fro m e j oin d on a.id=d.id-----做外连接selec t eid ,ena me,si x,nam e fro m e j oin d on a.id=d.id(+)----右外连接sele ct ei d ,en ame,s ix,na me fr om ejoind ona.id(+)=d.id----无关子查询s elect * fr om ewhere id i n (se lecteid f rom d)----相关子查询se lect* fro m e w hereid in (sel ect e id fr om dwhere id=d.id a nd id='003')s elect * fr om ewhere id n ot in (sel ect e id fr om dwhere id=d.id a nd id='003')-----存在则显示sele ct *frome whe re ex ists(selec t idfromd whe re id=d.id)-----不存在则显示selec t * f rom e wher e not exis ts(se lectid fr om dwhere id=d.id)-----------------------PLS QL基本语法----------------------------------------------------------------------------------------------------------se t ser verou tputon si ze 10000d eclar ex v archa r2(100);b eginx:='T his i s ....';D BMS_O UTPUT.PUT_LINE('x va lue i s '||x);e nd;-----if elsif el sede clareanumbe r;b var char2(10);begi na := 2;i f a = 1 th en b := 'A';e lsifa = 2 thenb :='B';els e b := 'C';en d if;DB MS_OU TPUT.put_l ine(b);en d;----------------casedecl are a nu mber;bvarch ar2(10);b egina := 2;cas e when a =1 the n b:= 'A'; whe n a = 2 th enb := 'B'; endcase;DB MS_OU TPUT.put_l ine(b);en d;-------------------------PLSQL循环-------------------------------------------- ------loopdecl are x nu mber;begi nx := 1;l oop x:= x+ 1;i f x > 3 th ene xit;e nd if; DBMS_OUTP UT.pu t_lin e(x);en d loo p;DBMS_OUTPU T.put_line(x);end;--------------whiledecl are x nu mber;begi nx := 1;w hilex > 3 loopx :=+1; DB MS_OU TPUT.put_l ine(x);end l oop;DBM S_OUT PUT.p ut_li ne(x);end;-------forbeginfo r x i n 1 .. 10loop------从小到大D BMS_O UTPUT.put_line(x); endloop;DB MS_OU TPUT.put_l ine('end o f for loop');e nd;beginfo r x i n re verse 1 .. 10 l oop------从大到小 DB MS_OU TPUT.put_l ine(x);end l oop;DBM S_OUT PUT.p ut_li ne('e nd of forloop');en d;----------------做标签decl are x nu mber;begi nx := 0;<<repe at_lo op>>x := x + 1; DBMS_OUTP UT.pu t_lin e(x);if x <3 the n goto repe at_lo op; endif;e nd;----------------e xcept ion 处理------------------------------------- d eclar et est v archa r2(100);b eginsel ect b ooks_nameintotestfrombooks wher e boo ks_id = 1; DB MS_OU TPUT.put_l ine(t est);ex cepti onwhenno_da ta_fo und t hen DB MS_OU TPUT.put_l ine('没有找到数据');end;-----------自定义异常d eclar et est v archa r2(100); e ex cepti on;b eginsel ect b ooks_nameintotestfrombooks wher e boo ks_id = 1; if test <> '中国文学1' the n rais e e;end if;DBM S_OUT PUT.p ut_li ne(te st);excep tionwhe n e t hen DB MS_OU TPUT.put_l ine('不是需要的书籍名称');en d;-----------------------记录的声明-------------------------------decla ret ype m yreco rd is reco rd(b namevarch ar2(100),bpubvarch ar2(100));rea l_rec ord m yreco rd;b eginsele ct bo oks_n ame,p ub in to re al_re cordfrombooks wher e boo ks_id=1;D BMS_O UTPUT.put_line(real_recor d.bna me || real_reco rd.bp ub);end;decl are type myre cordis re cord(bname book s.boo ks_id%type, ---------------声明的字段和表中的字段类型一样 bpu b va rchar2(100)); real_reco rd my recor d;be gin sele ct bo oks_n ame,pub i nto r eal_r ecord from book s whe re bo oks_i d = 1;D BMS_O UTPUT.put_line(real_recor d.bna me || real_reco rd.bp ub);end;dec laremyr ecord book s%row type;begi ns elect * in to my recor d fro m boo ks wh ere b ooks_id =1;DBMS_OUTPU T.put_line(myre cord.books_name || m yreco rd.pu b);e nd;-----------------------游标------------------------显示游标的使用方法d eclar ec ursor mycu rsoris sel ect * from book s;myrec ord b ooks%rowty pe;b eginope n myc ursor;f etchmycur sor in to my recor d;while mycu rsor%found loopDBMS_OUTPU T.put_line(myre cord.books_name || m yreco rd.pu b); fe tch m ycurs ori nto m yreco rd; endloop;cl ose m ycurs or;e nd;------带参数的游标d eclar ec ursor mycu rsor(booki d num ber)is sel ect * from book s whe re bo oks.b ooks_id =booki d;myrec ord b ooks%rowty pe;b eginope n myc ursor(1);fet ch my curso r into myre cord;wh ile m ycurs or%fo und l oop DB MS_OU TPUT.put_l ine(m yreco rd.bo oks_n ame || myr ecord.pub); fetc h myc ursor int o myr ecord;e nd lo op; clos e myc ursor;end;------使用for做游标的循环decl are curso r myc ursor(book id nu mber) iss elect book s_nam e fro m boo ks wh ere b ooks.books_id=b ookid;beg info r cur in m ycurs or(1) loopDBMS_OUTP UT.pu t_lin e(cur.book s_nam e);e nd lo op; end;----i s ope ndec lareboo kname book s.boo ks_na me%ty pe; curs or my curso r(boo ksidnumbe r) isselec t boo ks_na me fr om bo oks w herebooks_id = book sid;beginif mycu rsor%isope n the n DBMS_OUTP UT.pu t_lin e('cu rsoris op ened');elseo pen m ycurs or(1);e nd if;f etchmycur sor in to bo oknam e;close mycu rsor;db ms_ou tput.put_l ine(b ookna me);end;-------ro wcoun tdec lareboo kname book s.boo ks_na me%ty pe; curs or my curso r iss elect book s_nam e fro m boo ks;b eginope n myc ursor; fe tch m ycurs ori nto b ookna me; ex it wh en my curso r%not found or m ycurs or%no tfoun d isnull;DBMS_OUTPU T.put_line(mycu rsor%rowco unt);en d loo p;close mycu rsor;end;-----游标跟新数据de clarecu rsormycur sor i s sele ct bo oks_n ame f rom b ooksfor u pdate;t ext v archa r2(100);b eginope n myc ursor;f etchmycur sor in to te xt; whil e myc ursor%foun d loo p upda te bo oks setbooks_name = bo oks_n ame || '_t' whe re cu rrent of m ycurs or; fe tch m ycurs ori nto t ext;end loop;c losemycur sor;end;----------------隐式游标不需要声明beginfo r cur in (selec t boo ks_na me fr om bo oks)loopD BMS_O UTPUT.put_line(cur.b ooks_name);e nd lo op;e nd;--------------------存储过程------------------------------------------------------------------ cr eateor re place proc edure getB ookNa meByI d(boo kid i n num ber)isbookn ame v archa r2(100);b eginsel ect b ooks_nameintobookn ame f rom b ookswhere book s_id= boo kid;--s elect book s_nam e from book s whe re bo oks_i d=1;dbm s_out put.p ut_li ne(oo kbnam e);e nd;e nd ge tBook NameB yId;-----beg in调用过程tes t.get BookN ameBy Id(1);----调用过程exec ute t est.g etBoo kName ById(1);-----显示某个存储过程的错误信息s how e rrors proc edure getB ookNa meByI d; SELEC T * F ROM (SEL ECT A*, RO WNUMRNF ROM (SELEC T * F ROM b ooks) A)WHER E RNBETWE EN 1AND 5s elect coun t(*)from(sele ct *frombooks); 。
VBNET2008六种添加记录方法学习笔记(图例、源码、说明)(本文代码2008 + SQL Server 2005下测试通过。
)VB6.0向过渡后,很多编程爱好者对数据库编程感到迷惑,本文通过对国内教材、国外教材、老教材、新教材的研究,将作者看到过的6种(insert语句、参数化3种、行提交、存储过程、)添加(增加)记录的方法提炼出来,并分析了各种添加记录的优点、缺点及是否常用等做了简单叙述。
读者可以根据这些方法编写出对应的增删改查(CRUD)代码,使自己的程序编写的更加容易理解,提高编程效率,提升程序的运行速度。
百度文库首发,侵权必究。
一、前期准备工作(图例)1、引用数据库命名空间使用数据库对象时要首先导入数据库命名空间,数据库对象的命名空间根据你所使用的数据库不同,命名空间也不一样。
本文使用的是SQL Server的命名空间。
Imports System.Data.SqlClient2、界面设计1个Datagridview控件,5个TextBox控件,1个DateTimePicker 控件,5个按钮控件。
具体控件示例如下:3、在Datagridview表格中预览数据库记录简单的查询了这个表的所有记录。
Private Sub dataView()Dim objConn As New SqlClient.SqlConnectionDim objDa As New SqlClient.SqlDataAdapterDim objComm As New SqlClient.SqlCommandDim objDs As New DataSetobjConn.ConnectionString = "Data Source=172.30.76.249;Initial Catalog=ldg;UserID=wink;Pwd=wcp6810662"mandText = "select * from wink"objComm.Connection = objConnobjDa.SelectCommand = objCommobjConn.Open()objDa.Fill(objDs, "wink")objConn.Close()DataGridView1.DataSource = objDs.Tables("wink")End Sub4、窗体加载时调用dataView()过程预览数据库记录窗体的Form2_Load方法在本文的程序代码段中多次被调用以刷新表格,读者可以直接调用dataView()过程刷新表格。
(原创)三层架构数据库增删改查学习心得-WinForm通过一段时间对三层架构的学习,现将我的学习心得体会与大家分享。
本程序所使用的界面为Window应用程序(WinForm)界面,是客户端/服务器(C/S)模式的程序。
界面(UI)对三层架构来说使用WinForm还是WebForm异或移动设备都是一样的,无论换了什么皮肤都能基本使用才是三层架构意义之所在。
本程序在SQL-Server2005+2008下测试通过(附源码)。
一、首先说说三层架构的概念及作用,见下表。
三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。
区分层次的目的即为了“高内聚,低耦合”的思想。
再说说各层及类库之间的联系,见下图:其他的三层架构的优点及缺点本文就不论述了,请查阅相关资料。
二、本程序三层架构具体内容简介1、解决方案概览1、建立一张UserInfo表,源码如下:CREATE TABLE [dbo].[UserInfo]([UserID] [int] NULL,[UserName] [varchar](12) ,[UserPwd] [varchar](16) ,[UserBirth] [datetime] ,[UserQQ] [varchar](14)) ON [PRIMARY]2、建立一个Windows窗体应用程序文件→新建→项目→Visual Basic→Windows→Windows窗体应用程序。
这里是中文版2008,不同版本上述内容有些不同翻译。
3、建立Entity、DAL、BLL类库在第二步所创建的解决方案下,选择文件→添加→新建项目→Visual Basic→Windows →类库。
本程序是将所有类库建立在了一个解决方案之下,也可以独立分别建立独立的类库方案。
就是调用的时候不太方便。
4、设计UI操作界面如下:四、开始三层架构的代码设计顺序是数据库实体类(Entity)、数据访问层(DAL)、业务逻辑层(BLL)、表现层(UI)。
Oracle的crud操作Crud操作就是c (create) r (retrieve/read) u (update) d(delete)Insert添加操作1、插入的数据应与字段的数据类型相同Create table test10(id number);insert into test10(id)values(12);2、数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中Create table test11(name varchar2(2));insert into test11(name)values(‘ssss’);错误3、在values中列出的数据位置必须与被加入的列的排列位置相对应Create table test12( id number, name varchar2(64));Insert into test12 (id,name) values (‘shunping’,12);错误4、字符和日期数据应包含在单引号中Create table test13 (name varchar2(64),birthday);Insert into test13(name ,birthday)values(shunping,11-may-11);错误5、插入空值,不指定或insert into table value(null)Create table test14(name varchar2(64),age number);Insert into test14(name,age) values(‘shunping’,null);正确6、如果给表的每一列都添加值的话,则可以不带列名Insert into 表名values(列值...);向students中添加数据insert into students values(1,'zs','n','11-may-13',23.34,'hello'); insert into students values(2,'ls','n','11-may-13',23.34,'hello2'); insert into students values(3,'ww','s','11-july-13',23.34,'hello3'); Update 操作1、基本语法Update 表名set 列名=表达式[列名=表达式,....] where 条件2、使用的注意事项(1)update语法可以新值更新原有表行中的各列把zs这个人的性别改成supdate students set sex='s' where name='zs';Set 字句指示要修改哪些列和要修改哪些值把zs这个人的奖学金改为 10update students set fellowship=10 where name='zs';把所有学生的奖学金都提高10%update students set fellowship=fellowship*1.1;Where字句指定应更新哪些行。
C#--Oracle数据库基本操作(增、删、改、查)写在前⾯:常⽤数据库:类似于上篇有关SQLserver的C#封装,⼩编对Oracle数据库进⾏了相应的封装,⽅便后期开发使⽤,主要包括Oracle数据库的连接、增、删、改、查,如有什么问题还请各位⼤佬指教。
后续也将对其他⼏个常⽤的数据库进⾏相应的整理。
话不多说,直接开始码代码。
引⽤:由于微软在.框架4.0中已经决定撤销使⽤System.Data.OracleClient,造成在VS中⽆法连接Oracle数据库,但它还依旧存在于.架构中,我们可以通过⾃⼰引⽤。
具体⽅法如下:(1)在需要引⽤的程序集引⽤⽂件夹上右击,选择添加引⽤(2)选择浏览选项(3)找到⽬录 C:\Windows\Microsoft.\Framework\v2.0.50727(4)找到 System.Data.OracleClient.dll ⽂件(5)点击确定。
OK,引⽤完成using System.Data; //DataSet引⽤集using System.Data.OracleClient; //oracle引⽤先声明⼀个SqlConnectionprivate OracleConnection oracle_con;//声明⼀个OracleConnection⽅便使⽤Oracle打开:/// <summary>/// Oracle open/// </summary>/// <param name="link">link statement</param>/// <returns>Success:success; Fail:reason</returns>public string Oracle_Open(string link){ try { oracle_con = new OracleConnection(link); oracle_con.Open(); return "success"; } catch (Exception ex) { return ex.Message; }}Oracle关闭:/// <summary>/// Oracle close/// </summary>/// <returns>Success:success Fail:reason</returns>public string Oracle_Close(){ try { if (oracle_con == null) { return "No database connection"; } if (oracle_con.State == ConnectionState.Open) { oracle_con.Close(); oracle_con.Dispose(); } else { if (oracle_con.State == ConnectionState.Closed) { return "success"; } if (oracle_con.State == ConnectionState.Broken) { return "ConnectionState:Broken"; } } return "success"; } catch (Exception ex) { return ex.Message; }}Oracle的增删改:/// <summary>/// Oracle insert,delete,update/// </summary>/// <param name="sql">insert,delete,update statement</param>/// <returns>Success:success + Number of affected rows; Fail:reason</returns>public string Oracle_Insdelupd(string sql){ try { int num = 0; if (oracle_con == null) { return "Please open the database connection first"; } if (oracle_con.State == ConnectionState.Open) { OracleCommand oracleCommand = new OracleCommand(sql, oracle_con); num = oracleCommand.ExecuteNonQuery(); } else { if (oracle_con.State == ConnectionState.Closed) { return "Database connection closed"; } if (oracle_con.State == ConnectionState.Broken) { return "Database connection is destroyed"; } } return "success" + num; } catch (Exception ex) { return ex.Message.ToString(); }}Oracle的查:/// <summary>/// Oracle select/// </summary>/// <param name="sql">select statement</param>/// <param name="record">Success:success; Fail:reason</param>/// <returns>select result</returns>public DataSet Oracle_Select(string sql, out string record) try { DataSet dataSet = new DataSet(); if (oracle_con != null) { if (oracle_con.State == ConnectionState.Open) { OracleDataAdapter oracleDataAdapter = new OracleDataAdapter(sql, oracle_con); oracleDataAdapter.Fill(dataSet, "sample"); oracleDataAdapter.Dispose(); record = "OK"; return dataSet; } if (oracle_con.State == ConnectionState.Closed) { record = "Database connection closed"; } else if (oracle_con.State == ConnectionState.Broken) { record = "Database connection is destroyed"; } } else { record = "Please open the database connection first"; } record = "error"; return dataSet; } catch (Exception ex) { DataSet dataSet = new DataSet(); record = ex.Message.ToString(); return dataSet; }}⼩编发现以上这种封装⽅式还是很⿇烦,每次对Oracle进⾏增删改查的时候还得先打开数据库,最后还要关闭,实际运⽤起来⽐较⿇烦。
我的+oracle增删改查学习笔记(本源码在2008下测试通过)学习有一段时间了,之前一直学习VB6.0。
过度到.NET 后发现与之前所学习的有了相当大的变化。
于是将编程经常用到的增删改查代码提炼出来,备后日使用及各位一起学习。
各段代码均可以独立运行,读者可以活学活用,设置公共变量剔除冗余代码。
可以将连接代码写成函数,随时调用,不用每次都加。
主要内容为:添加数据库部件引用、设置连接字符串、设置界面、查询并将结果放入表中、添加按钮代码、修改操作、删除操作、调用无参数的存储过程、调用有参数的存储过程、最终所有代码。
一、首先,要引用System.Data.OracleClient,我的电脑中已经安装Oracle9i,在COM选项卡下可以找到该项。
如果不添加该引用,程序将无法运行。
二、连接字符串(可以添加一个OracleConnection对象,针对您的计算机进行设置,然后复制ConnectionString代码,记得复制完删除它;也可以复制下面的代码,然后更改用户名及密码)'对OracleConnection对象的ConnectionString属性赋值,指定连接位置objconn.ConnectionString = "Data Source=myzsyy;Persist Security Info=True;User ID=bzk22;Password=zxcvbn;Unicode=True"三、界面如下四、查询并将结果放入表中,代码如下:我将该段代码放置在了Form_Load过程中,您也可以把该代码放置在按钮或其他过程中。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadDim strSql As StringDim strConn As StringDim objDA As OracleClient.OracleDataAdapterDim objds As New Data.DataSetstrConn = "Data Source=myzsyy;Persist Security Info=True;UserID=bzk22;Password=zxcvbn;Unicode=True"strSql = "select * from TEST "objDA = New OracleClient.OracleDataAdapter(strSql, strConn)objDA.Fill(objds, "TEST")DataGridView1.DataSource = objds.Tables("TEST")End Sub五、添加按钮代码如下:添加后表格中数据未进行更新,加入Call Form1_Load(sender, e)代码实现即时更新。
我的+oracle增删改查学习笔记(本源码在2008下测试通过)学习有一段时间了,之前一直学习VB6.0。
过度到.NET 后发现与之前所学习的有了相当大的变化。
于是将编程经常用到的增删改查代码提炼出来,备后日使用及各位一起学习。
各段代码均可以独立运行,读者可以活学活用,设置公共变量剔除冗余代码。
可以将连接代码写成函数,随时调用,不用每次都加。
主要内容为:添加数据库部件引用、设置连接字符串、设置界面、查询并将结果放入表中、添加按钮代码、修改操作、删除操作、调用无参数的存储过程、调用有参数的存储过程、最终所有代码。
一、首先,要引用System.Data.OracleClient,我的电脑中已经安装Oracle9i,在COM选项卡下可以找到该项。
如果不添加该引用,程序将无法运行。
二、连接字符串(可以添加一个OracleConnection对象,针对您的计算机进行设置,然后复制ConnectionString代码,记得复制完删除它;也可以复制下面的代码,然后更改用户名及密码)'对OracleConnection对象的ConnectionString属性赋值,指定连接位置objconn.ConnectionString = "Data Source=myzsyy;Persist Security Info=True;User ID=bzk22;Password=zxcvbn;Unicode=True"三、界面如下四、查询并将结果放入表中,代码如下:我将该段代码放置在了Form_Load过程中,您也可以把该代码放置在按钮或其他过程中。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadDim strSql As StringDim strConn As StringDim objDA As OracleClient.OracleDataAdapterDim objds As New Data.DataSetstrConn = "Data Source=myzsyy;Persist Security Info=True;UserID=bzk22;Password=zxcvbn;Unicode=True"strSql = "select * from TEST "objDA = New OracleClient.OracleDataAdapter(strSql, strConn)objDA.Fill(objds, "TEST")DataGridView1.DataSource = objds.Tables("TEST")End Sub五、添加按钮代码如下:添加后表格中数据未进行更新,加入Call Form1_Load(sender, e)代码实现即时更新。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickDim strSql As StringDim strConn As StringDim objDA As OracleClient.OracleDataAdapterDim objds As New Data.DataSetDim objcb As OracleClient.OracleCommandBuilderDim objrow As Data.DataRowstrConn = "Data Source=myzsyy;Persist Security Info=True;UserID=bzk22;Password=zxcvbn;Unicode=True"strSql = "select * from TEST order by A DESC"objDA = New OracleClient.OracleDataAdapter(strSql, strConn)objcb = New OracleClient.OracleCommandBuilder(objDA)objDA.Fill(objds, " TEST ")objrow = objds.Tables("TEST ").NewRowobjrow("A") = TextBox1.Textobjrow("B") = TextBox2.Textobjrow("C") = TextBox3.Textobjrow("D") = TextBox4.Textobjds.Tables("TEST ").Rows.Add(objrow)objDA.Update(objds, " TEST ")Call Form1_Load(sender, e)End Sub六、修改操作,分两步,首先将表格中选中行数据放在各个TextBox中,然后进行UpDate操作。
第一步:注意是DataGridView1_CellClick事件。
其他事件单击后无此效果。
Private Sub DataGridView1_CellClick(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClickTextBox1.Text = DataGridView1.CurrentRow.Cells.Item(0).Value.ToStringTextBox2.Text = DataGridView1.CurrentRow.Cells.Item(1).Value.ToStringTextBox3.Text = DataGridView1.CurrentRow.Cells.Item(2).Value.ToStringTextBox4.Text = DataGridView1.CurrentRow.Cells.Item(3).Value.ToString End Sub第二部:修改按钮代码如下:Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.ClickDim strSql As StringDim strConn As StringDim objDA As OracleClient.OracleDataAdapterDim objds As New Data.DataSetstrConn = "Data Source=myzsyy;Persist Security Info=True;UserID=bzk22;Password=zxcvbn;Unicode=True"strSql = "update TEST set B='" + Trim(TextBox2.Text) + "',C='" + Trim(TextBox3.Text) + "',D='" + Trim(TextBox4.Text) + "' where A='" + Trim(TextBox1.Text) + "'"objDA = New OracleClient.OracleDataAdapter(strSql, strConn)objDA.Fill(objds, " TEST ")Call Form1_Load(sender, e)End SubEnd Class七、删除按钮代码如下:Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.ClickDim strSql As StringDim strConn As StringDim objDA As OracleClient.OracleDataAdapterDim objds As New Data.DataSetstrConn = "Data Source=myzsyy;Persist Security Info=True;UserID=bzk22;Password=zxcvbn;Unicode=True"strSql = "delete from TEST where A like '%" + Trim(TextBox1.Text) + "%'"objDA = New OracleClient.OracleDataAdapter(strSql, strConn)objDA.Fill(objds, " TEST ")End Sub八、调用带参数的存储过程第一步:创建存储过程create or replace procedure addTest(Pro_A TEST.A%type,Pro_B TEST.B%type,Pro_C TEST.C%type,Pro_D TEST.D%type)asbegininsert into TEST (A,B,C,D)values(Pro_A,Pro_B,Pro_C,Pro_D);commit;end;第二步:利用存储过程添加记录按钮的代码Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.ClickDim strConn As New OracleConnection("Data Source=myzsyy;Persist Security Info=True;User ID=bzk22;Password=zxcvbn;Unicode=True")Dim objCmd As New OracleCommand()objCmd.Connection = strConn'bzk22.addtest为存储过程名mandText = "bzk22.addtest"mandType = CommandType.StoredProcedure'Pro_A为存储过程中参数的名称objCmd.Parameters.Add("Pro_A", OracleType.VarChar).Value = TextBox1.TextobjCmd.Parameters.Add("Pro_B", OracleType.VarChar).Value = TextBox2.TextobjCmd.Parameters.Add("Pro_C", OracleType.VarChar).Value = TextBox3.TextobjCmd.Parameters.Add("Pro_D", OracleType.VarChar).Value = TextBox4.Text Dim objDA As New OracleDataAdapter(objCmd)Dim objDs As New DataSet()objDA.Fill(objDs, " TEST ")Call Form1_Load(sender, e)End Sub九、调用带参数的存储过程各段代码均可以独立运行,读者可以活学活用,设置公共变量剔除冗余代码。