ADO.net学习
<1>在VS2017中建立Windows 窗体应用(.NET Framework)项目。
<2>在解决方案资源管理器中,打开Form1.cs,主题窗口会出现Form1.cs[设计]的标题。
<3>打开工具栏,找到Button控件,将该控件拖拽到设计面板中,右键这个控件,点击属性,在Text栏目中输入该按钮的名称。在"设计"的(Name)栏目中输入该按钮的响应函数的名字。我设计的是:btnCreateConnection。软后双击这个按钮,就会转向Form.cs中的btnCreateConnection_Click。也就是该按钮的点击的响应函数。设置这个函数的目的是第一次连接数据库。
<4>[注:本文连接的是SQLserver数据库]。
<5>增加命名空间:
System.Data.SqlClient 命名空间是用于 SQL Server 的 .NET 数据提供程序
System.Data.Common 用于使用DbConnection,DbCommand,DbDataReader类等。
System.Configuration 命名空间包含提供用于处理配置数据的编程模型的类。
数据库文件:链接:https://pan.baidu.com/s/1GT-eyEtK9K06TYYUrLPrdg 密码:8jjw
下载后所包含的数据库文件有:
BulkCopy.mdf,
BulkCopy_log.ldf;
PUBS.MDF,
PUBS_LOG.LDF;
我将这些数据库文件附加到了SQL Server2014的数据库管理系统中,这样的话接下来写的程序对数据库的更改变化就可以通过Navicat直观地查看内容的变化。
<6>在btnCreateConnection_Click响应函数中连接数据库,这里遇到了分支。第一种情况是数据库文件在解决方案资源管理器中,第二种情况是数据库附加到数据库管理系统或者该数据库由数据库管理系统创建。
第一种情况:数据库文件在解决方案管理器中。
A,当直接在响应函数中写连接数据库的语句时:
DbConnection con = new SqlConnection(); con.ConnectionString = @"Data Source=.\SQLEXPRESS;" + "AttachDbFilename=|DataDirectory|PUBS.MDF;" + "Integrated Security=True;User Instance=True"; con.Open(); //Do lots of cool work here con.Close();
配置文件(也就是App.config)里面封装的内容需要添加:
<connectionStrings> <add name="PubsData" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|PUBS.MDF;Integrated Security=True;User Instance=True;" providerName="System.Data.SqlClient" /> <add name="PubsDataMars" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\PUBS.MDF;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" /> <add name="BulkCopy" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\BulkCopy.mdf;Integrated Security=True;User Instance=True;" providerName="System.Data.SqlClient" /> </connectionStrings>
(在<configuration></configuration>也就是XML的根元素中添加内容)
在响应函数中写的语句为:
ConnectionStringSettings pubs = ConfigurationManager.ConnectionStrings["PubsData"]; DbConnection con = new SqlConnection(pubs.ConnectionString);
con.Open(); //Do lots of cool work here con.Close();
为了验证连接数据库成功,可以通过在//Do lots of cool work here中查询数据库中表的内容验证:
DbCommand cmd = con.CreateCommand(); cmd.CommandText = "select * from sales"; con.Open(); DbDataReader dr = cmd.ExecuteReader(); if (dr.HasRows) { while (dr.Read()) { string stor_id = dr["stor_id"].ToString(); string ord_num = dr["ord_num"].ToString(); string ord_date = dr["ord_date"].ToString(); string title_id = dr["title_id"].ToString(); Console.WriteLine(stor_id+" "+ord_num+" "+ord_date+" "+title_id); } }
这里就可以体现了将数据库文件附加到数据库管理系统之后通过Navicate查看表的优势。表中的各个关键字都可以查看,以便写出while(dr.Read())中的语句。 第二种情况:数据库附加到数据库管理系统或者该数据库由数据库管理系统创建。
A,当直接在响应函数中写连接数据库的语句时:
DbConnection con = new SqlConnection(); con.ConnectionString = @"Initial Catalog=PUBS;Persist Security Info=True;User ID=sa;password=hl123456789";
con.Open();
//Do lots of cool work here con.Close();
尤其要根据自己的数据库管理系统设置相应的User ID跟password。
B,当用配置文件里面封装的内容连接数据库时,语句为:
配置文件里的语句为:
<connectionStrings>
<add name="dbstconnectionstring" connectionString="Initial Catalog=PUBS;Persist Security Info=True;User ID=sa;password=hl123456789" providerName="System.Data.SqlClient"/> </connectionStrings>
响应函数中的语句为:
string connectionString = ConfigurationManager.ConnectionStrings["dbstconnectionstring"].ConnectionString; DbConnection conn = new SqlConnection(connectionString); DbCommand cmd = conn.CreateCommand(); cmd.CommandText = "select * from authors"; conn.Open(); //Do a lot of work conn.Close();
[注:]第<6>个内容中,如果想通过响应函数来查看配置文件的具体内容时候,语句可以写成:(这里接的是第<6>个内容的第一种情况的B类)
ConnectionStringSettings pubs = ConfigurationManager.ConnectionStrings["PubsData"]; DbConnection connection = new SqlConnection(pubs.ConnectionString); //name = "PubsData" string name = pubs.Name; //provider = "System.Data.SqlClient" string provider = pubs.ProviderName; //cnString = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\PUBS.MDF;Integrated Security=True;User Instance=True" string cnString = pubs.ConnectionString; MessageBox.Show("From App.Config: " + cnString+"\n"+name+"\n"+provider);
<7>使用DataGridView控件,和按钮的响应事件,来显示 SqlConnection的数据源的架构信息
其中:
GetSchema():返回此 SqlConnection 的数据源的架构信息
GetSchema(String):使用表示架构名称的指定字符串返回此 SqlConnection 的数据源的架构信息
我设计了两个DataGridView控件,分别为dataGridView1,dataGridView2,第一个用于GetSchema(),第二个用于GetSchema(String),其中dataGridView2用于点击dataGridView1中的行的内容,显示具体的内容。
准备:
按钮,响应函数为:btnGetSchema_Click
自己写一个dataGridView事件变化函数ataGridView_SelectionChange
并在dataGridView1属性(闪电栏目)中的SelectionChange响应事件中添加写的这个函数。
源程序为:
private void btnGetSchema_Click(object sender, EventArgs e) { //Get the settings from the configuration file ConnectionStringSettings pubs = ConfigurationManager.ConnectionStrings["PubsData"]; DbConnection connection = new SqlConnection(pubs.ConnectionString); connection.Open(); DataTable schema = connection.GetSchema(); connection.Close(); dataGridView1.DataSource = schema; } private void dataGridView1_SelectionChanged(object sender, EventArgs e) { DataTable schema = (DataTable)dataGridView1.DataSource; DataRow currentRow = schema.Rows[dataGridView1.CurrentCell.RowIndex]; string collection = (string)currentRow["CollectionName"]; //Get the settings from the configuration file ConnectionStringSettings pubs = ConfigurationManager.ConnectionStrings["PubsData"]; DbConnection connection = new SqlConnection(pubs.ConnectionString); connection.Open(); DataTable schema2 = connection.GetSchema(collection); connection.Close(); dataGridView2.DataSource = schema2; }
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
mysql中使用select的正确姿势你知道吗?
引言 大家在开发中,还有很多童鞋在写查询语句的时候,习惯写下面这种不规范sql 而不写成下面的这种规范方式 我也知道,这些童鞋是图方便,毕竟再敲一堆的列名,嫌麻烦! 你们上班可以问问自己的同事 我也知道,很多人至今都没有搞懂select *和selct 所有字段的区别 因此,我开一文来说明一下。另外,我选的是自己最熟悉的mysql数据库,此文的结论在oralce,sqlserver上是否成立,博主没做过测试。 正文 (select所有字段)性能高? 网络上流传着一种说法说是 然而,实际上呢?效率是相差不大的!。 取博客 http://flysnowxf.iteye.com/blog/1125032 的测试结果 mysql 5.1.37 表记录数41,547,002,即4000w行 使用远程客户端取1000条数据,统计时间: 时间2.218s,网络消耗0.547s 取出所有字段,时间2.250s,网络消耗0.578s 可以看出,这二者的时间差几乎可以忽略,另外还有一本书上的内容也可以佐证我的话。 《SQL CookBook》第一章 检索记录中1.1小节(原书第十五页内容如下):...
- 下一篇
月薪8k和月薪38K的程序员差距在哪里?
回想做开发的这八年多,获得了很多,技术能力、培训、出国、大公司的,还记得刚刚出来第一年那段时间,太多东西不懂的,都是一切听从老大的安排,敲敲代码,看看数据库,测试自己和别人的代码;这样干了一年 第二年的时候在想,自己还要这样吗? 当然是否定的,不可能的,一年的经验自己完全可以入行了,是时候该学习怎么进行需求分析,怎么设计数据库,怎么写各类文档,怎么写更好的代码? 所以说:一个人在一家公司呆久了,千万不要模式化,一直待着舒适区,因为当你一旦离开这家公司,找工作的时候就会很容易碰壁,在这里: 我建议大家一定要提前计划着去学习 ... 说到这里,也给大家推荐一个架构交流学习群:835544715,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,相信对于已经工作和遇到技术瓶颈的码友,在这个群里会有你需要的内容。 我在这里给那些想达到这个高度甚至想往架构师发展的程序员提供一份进阶路线图,主要针对1到5年及以上工作经验的Java开发人员,从广度到...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- 2048小游戏-低调大师作品
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Red5直播服务器,属于Java语言的直播服务器
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7