# **两种组合:command + dataRead 或者是 dataAdapter + dataSet + dataGrieview**
# 1、Command + DataRead( )
需要一直连接数据库。
1、命名空间:using System.Data.SqlClient;
2、与数据库相关的对象首先必须用sqlconnection方法创建一个连接对象(取名为conn);其次,与数据库有关的增、删、改、查操作,都必须创建 SqlCommand 对象(命名为sqlcmd)来调用其中的方法;
3、用到的方法是Read方法;但该方法无构造函数,所以需要通过sqlcommand对象的 executeRead()方法来生成;
所以这就需要先创建 sqlcommand 对象(取名为 sqlcmd),再通过 sqlcmd 去调用 executeRead 方法(表达为:sqlcmd.ExecuteRead())。
4、一共实例化了3个对象;sqlconn、sqlcomm、sqldr。
5、用完需要关闭的资源:数据库连接对象 conn 与dataread 对象;
代码如下:(可以创建一个富文本 richtextbox 来做这个操作,并且双击 form 对话框,就可以得到 private void Form1_Load(object sender, EventArgs e) ) 。
```
private void Form1_Load(object sender, EventArgs e)
{
//实例化数据库连接对象 conn
SqlConnection conn = new SqlConnection ("server = CA9; database = 审图表; uid = sa; pwd = Am******23 ")
// 实例化 command 对象,并输入一条要执行的 sql 语句。这里我们想查询的是查找 dbo.审核信息这张表中的所有列,并且用ID 这一列的正序来查。逆序是desc。
SqlCommand sqlcmd2 = new SqlCommand ("select * from dbo.审核信息 order ID asc", conn) // 括号内两个参数,一个是需要执行的 sql 查询语句,一个是匹配的连接对象conn。
//实例化 DataRead 对象,通过 sqlcmd 对象的executeRead方法来创建
SqlDataReader sqldr = sqlcmd2.ExecuteRead( );
//分别实例化三个对象以后,开始执行
conn.Open( );
if (sqldr.HasRows) //用 sqldr 对象的 HasRows 方法来检查数据库中是否有数据,如果有则是 true。
{
while(sqldr.Read() ) // 则用sqldr 对象的 Read 方法来一行行遍历数据
{
richTextbox.Text += sqldr["ID"] + “ ” + sqldr["项目编号"] + "\n"// 在我们添加的富文本框中,依次输出ID编号及项目编号。调用对象的ID列,用的表达形式是sqldr["列名"]。
}
}
sqldr.Close( ); //需要关闭 sqldr 对象
conn.Close( ); //需要关闭数据库
}
```
> 注:两个sqldr 中间需要再加入空格`+" "`,才不会系统出错。
![](https://box.kancloud.cn/f350812a03f15b1de47f3f8251bbdc85_877x463.png)
# 2、DataSet + DataAdapter( ) + DataSet() + DataGridViews控件
> 如果用这个组合,则无需设置 command ,也无需 conn.open()
不需要一直连接数据库。
过程如下图:
![](http://ww4.sinaimg.cn/large/006tNc79gy1g43d9j1rozj328q0u0k8h.jpg)
1、DataSet对象是数据集(可以理解为临时数据库)、DataAdapter对象用来在 set 数据集、数据库之间进行增删改查操作。DataGridView 空间是 set 数据集的体现。
dataset数据集中,除了是一张张dataTable数据表的集合,也可以是一个个数据存储关系的集合。所以在dataGridview控件中指定datasourcr的时候,用的是ds.Table["temp"],意思是调用 set 集合中的 Table(表格),然后方括号里面是表的名字。
可以看出 我们可以在同一个 set 对象中设置不同的临时表 Table,取名为 Table1,Table2等。
一共实例化了3个对象。无需打开数据库,因为DataAdapter自己会打开并关闭。
```
//实例化连接对象
SqlConnection sqlconn = new SqlConnent( "server = CA9A; database = 审图表; uid = sa; pwd = xxx");
//实例化 dataadapter 对象,
SqlDataAdapter sqlda = new SqlDataAdapter ("select * from dbo.审图表", sqlconn);
//实例化 dataset 对象
DataSet myds = new DataSet( );
sqlda.Fill( myds, "temp_table"); // 用 sqlda 对象的 Fill 方法来填充数据集。
//将 set 数据集体现在 datagridview 控件中
DataGridView1.DataSource = myds.Tables["temp_table"];
```
> 也可以直接在 dataGridView 控件属性中指定控件的数据源,一旦指定了,系统会自动生成dataAdapter 以及dataSet对象。
![](https://box.kancloud.cn/be6bc4b5cad2c50f761124f1cbd2b3f1_579x88.png)
# 例子datagridview DataGridView
登录界面用
`dataGridView1.Rows[0].Cells["密码"]` 或者是`dataGridView1.Rows[0].Cells[2]`来表示行列。
或者是用`DataGridView[0,2]`即可,但实际运行会提示错误。
如果不通过 DataGridView 而是直接用 DataSet 的话:
`ds.Tables["登录"].Rows[0][2].ToString() != LogPwd;`
```
private void button1\_Click(object sender, EventArgs e)
{
LogID = richTextBox1.Text.Trim();
LogPwd = richTextBox2.Text.Trim();
//连接到“XMEDI”中的dbo.登陆账户,与这个表里面的账户共用信息
SqlConnection sqlconn = new SqlConnection("server=");
SqlDataAdapter da = new SqlDataAdapter("select \* from dbo.登陆账户 where 员工工号 = " + LogID + "and 密码 =" + LogPwd, sqlconn);
//不要直接写"select \* from dbo.登陆账户",而是直接根据用户输入的员工编号去建一个sqlda,在这里直接判断完,后面就不需要在写w.指针了。但要注意写的sql语句应该是更VBA那样用加号+拼接起来。不能直接写"select \* from dbo.登陆账户 where 员工工号=LogID and 密码 = LogPwd",因为这样LogID和LogPwd就无法被识别了。
//如果用户录入的员工编号及密码与数据库中数据一致,则打开主窗口
DataSet ds = new DataSet();
da.Fill(ds,"登录");
if (ds.Tables\["登录"\].Rows.Count > 0) //说明dbo.登陆账户表中有数据
{
Form2 form2 = new Form2();
form2.ShowDialog();
}
else
{
MessageBox.Show("登录失败");
}
}
```
![](https://img.kancloud.cn/02/f0/02f0416a257df26d72aa3f8a686dcffe_882x517.png)
### 判断登录条件
![](https://img.kancloud.cn/44/c7/44c740fc4647461da6961fced9bf329a_858x272.png)
- 帮助文档 microsoft helo viewer
- c#开发环境及visual studio安装注意事项
- c#程序基本结构-基本语法
- Q1: public static void main(String[] args) 是什么意思
- Q2: c#命名空间+Main方法
- Q3:注释+命名规则+代码规则
- Q4: c#语句 system => console
- Q5: 数据类型 .net
- Q5: 常用名字、变量、运算符
- Q6: 对话窗输入-属性
- Q7: 递归
- Q8:决策分支、条件判断语句 if 语句
- Q9:数组
- Q10:字符串
- Q11:对象、类、访问权限、静态动态函数
- Q12:方法及参数——继承于类
- Q13:构造函数
- Q14:继承——base 关键字
- Q15:多态、虚方法、接口
- Q16:创建窗体应用、控件
- Q17:Ado数据访问、连接 sqlserver 数据库
- Q18: 读取数据command + DataRead( )、DataSet + DateAdapter
- Q19: Entity Framwork、entity 与 ADO.net的区别
- Q20: 对话框、文件、文件夹
- Q21: 导入excel数据、更新到 dbo 数据库中
- Q26: 获取 excel 中每个 sheet 的表名
- Q22: 两个窗体之间数据+方法传递
- Q23: 数学对象
- Q24: c#网站编写
- Q25: visual studio2017如何查看帮助
- Q27: c# dictionary 字典对象
- Q28: 数组与dataTable互相转化