ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# **两种组合: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)