🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 1. 前几代模型 https://my.oschina.net/u/1772925/blog/420054 ODBC位于数据访问的最底层,OLEDB次之,ADO位于最上层。 我们的应用程序可以通过三种方式访问数据库,分别是: - 应用程序——ODBC——数据库; - 应用程序——OLEDB——ODBC——数据库; - 应用程序——ADO——OLEDB——ODBC——数据库。 ![](https://box.kancloud.cn/4f5e2aa6c2e143cdb92c32b1a646d094_461x460.png) 在用到数据库跟 Microsoft相关办公软件(Excel Word等,或者是access数据库)对接的时候,需要用到oledb这个对象。 ## sqlcommand oledbcommand 区别 如果针对的是sql数据库,则用sqlcomMand 更好。如果不一定是sql数据库,比如有可能是access oracle数据库,则可用oledbcommand. # 2. ADO.NET对象模型 ## 模型 包括: * Data Table * 数据集 DataAdapter DataReader * Command * 数据链接 Connection// 提供与数据库的连接功能 ![](http://ww2.sinaimg.cn/large/006tNc79gy1g431dkrcf5j30q10cudh5.jpg) ## 命名空间 使用时需要加载以下命名空间: ``` using System.Data; using System.Data.Common; using System.Data.Odbc; using System.Data.OleDb; //用于跟Microsoft对接的接口协议 using System.Data.SqlClient; //最常用 using System.Data.SqlTypes; using System.Data.oracleClient; ``` 最常用的为: ``` using System.Data; using System.Data.SqlClient; ``` ![](https://box.kancloud.cn/144b60f32e8cad03f5b0cd9b42255e6a_1078x482.png) ## connection 数据连接对象 > 所有数据库的访问都是从数据连接开始的 连接sql数据库: `"server = 服务器名; database = 数据库名; uid = 用户名; pwd = 密码"` 如果是用 windows 账号登录,则可以`"server = 服务器名; database = 数据库名; integrated = SSPI"` 如果是连接 access 数据库:`"provide = 提供者; datasource = access文件路径"` ![](http://ww3.sinaimg.cn/large/006tNc79gy1g431bdgry9j30pm0chwh8.jpg) ![](http://ww4.sinaimg.cn/large/006tNc79gy1g431critrjj30nl0bmq4x.jpg) 逻辑是:如果要连接到数据库,则需要创建一个连接字符串(比如命名为SqlStr),然后通过这个连接字符串的 connection 方法再去连接数据库 ``` string SqlStr= "Server = . ; database = 审图表; uid = sa; pwd = Am******23"; SqlConnection con = new SqlConnection(SqlStr); con.Open(); …… ``` 也可参看:几种身份认证模式 如果是 sqlserver 用户名密码登录,则用户名一般为 sa,server 可以直接写等于“.”。如果是用 windows 登录,则可以不用写用户名uid 或密码 pwd,但需要写"IntegratedSecurity = SSPI"。 https://blog.csdn.net/sinat_15155817/article/details/58266044 启用connection数据连接对象。比如插入控件label1和label2,如果登录了,则在label1显示“sql 数据库已登录”。如果退出了,需要在label2显示“数据库未登录”。在form1的 load 内输入代码如下: ![](https://ws2.sinaimg.cn/large/006tKfTcgy1fslk0j3vyvj30ba06it8v.jpg) ``` string SqlStr = "Server = CA9A; User Id = sa; Pwd = Am******23; DataBase = amy"; SqlConnection con = new Sqlconnection(SqlStr); con.open (); if( con.State == ConnectionState.Open) { label1.Text = "sql已连接"; con.Close(); } if(con.State == ConnectionState.Close) { label2.Text = "sql 未连接"; } ``` ![](https://ws4.sinaimg.cn/large/006tKfTcgy1fslkk5g96fj30sl08l3zr.jpg) > - 关键是输入以下信息(可以在sql sercer 2017配置管理器 中找到) > - server => 一般是服务器的名字,若有斜杠,则需要多输入一个反斜杠 > - user id => 一般是 sa > - 密码 > - 数据库名称 => 比如本例中的 amy ## 关于查找上面信息: 在ssms中打开。user id 一般是后面的“CA9A\zyt”,但我们一般写 sa。 ![](https://ws4.sinaimg.cn/large/006tKfTcgy1fslkhc41edj30pi0ciacb.jpg) ## 关于 TCP/IP 设置: [sql server 部分参考](https://ihavenolimitations.xyz/amy326/sql_server/667992) 需在sql server 2017配置管理器中将服务器实例(也就是mssqlsercer)中的TCP/IP IP地址设置成启用。这里的意思是,允许外部通过服务器访问数据库。 ![](https://ws2.sinaimg.cn/large/006tKfTcgy1fslkbg941fj30jz0ihgnx.jpg) # 3. Command对象 ## 常用属性 CommandType CommandText CommandTimeOut Connection Parameters ![](https://ws1.sinaimg.cn/large/006tKfTcgy1fsn1f7b6efj30me0ar414.jpg) ## 常用方法 ExecuteNonQuery ——常用,执行非 select 命令,比如增、删、改查等功能; ExecuteScalar——执行 select 命令中的 count 或 sum 等函数; ExecuteReader ——执行 select 命令 ![](https://ws1.sinaimg.cn/large/006tKfTcgy1fsn1fgoodfj30jl098jt2.jpg) ## command操作数据 > 执行完数据库操作时一定要关闭数据库连接。使用`conn.Close()`语句。 几个常用命令: ![](https://ws1.sinaimg.cn/large/006tKfTcgy1fsn1pz1435j30u50ef777.jpg) ![](http://ww1.sinaimg.cn/large/006tNc79gy1g4329zko5mj30jh09ngno.jpg) ![](https://box.kancloud.cn/a7d5172cb6a82ebfa96f54e71f93447c_639x341.png) ``` sqlconnection conn = new sqlconnection("server = CA9A; database = 审图表; integrate = SSPI"); string strsql = "insert into dbo.审核信息(项目编号, 项目名称) values (' "+convert.toString( textBox1.Text)+" ', ' "+textBox.Text+" ')"; sqlcommand comm= new sqlcommand(strsql, conn); conn.open(); comm.ExecuteNonQuery(); //执行。也就是说写了上面的 sql 语句以后,再写 executenonquery ,就表示“run!” 开始执行。这个方法用来执行 select 以外的命令。如果 sql 语句是 select,则无法使用这个方法。 conn.close(); ``` > 注意表达,有单引号,有双引号,有加号,有括号 ![](https://box.kancloud.cn/2ea6c08831daa643dbfc24ad7ee4e7b5_806x286.png) ## command 调用存储过程 存储过程详见: [https://ihavenolimitations.xyz/amy326/sql_server/675379](https://ihavenolimitations.xyz/amy326/sql_server/675379) 比直接用一般的 sql 语句更安全。 ![](https://box.kancloud.cn/e087846e6dfdaf66c2da996c72c976d2_1064x547.png) 这些变量应该要已经在dbo数据库-存储过程中添加。 ![](https://ws1.sinaimg.cn/large/006tKfTcgy1fsrosybj6hj30a50hljss.jpg) ## DateReader 对象 没有自己的构造函数,所以要通过sqlCommand对象的ExecuteReader方法使用。比如sqlcommand对象变量命名为 sqlcmd,则需要实例化为:`sqlDateReader sqldr = sqlcmd.ExecuteReader();` # 3. Data Table、DataSet、DataAdapter、Command Connection的关系 http://blog.sina.com.cn/s/blog_7e540ba10102vc26.html dataReader 与 dataCommand、dataAdapter 都是对象 ![](https://ws4.sinaimg.cn/large/006tNbRwgy1fx2sfbxlrzj31kw1294my.jpg)