ADO.NET开发技巧(5)-第二种方法

第二种用ado.net操作数据的方式是采用DataSet和DataAdapter。它是用Adapter类读取数据在把数据存储在DataSet中。具体代码如下:

private void BindData()
        {
            string comnStr = @"data source=BLACKERXHUNTER\SQLEXPRESS;initial catalog=StudyUse;
         integrated security = True;";
            using (SqlConnection conn = new SqlConnection())
            {
                string sql = "select * from Department";
                SqlDataAdapter adpter = new SqlDataAdapter();
                DataSet ds = new DataSet();
                conn.Open();
                adpter.Fill(ds);
            }
        }

这些代码会将Department表中的所有数据填充到ds变量中(也就是DataSet类)。这个DataSet类中包含了DataTable,DataColumn和DataRows,也就是说查询到的所有数据都被表示了出来。其实我们也可以推测出他的原理,即把数据库的所有行列用一个循环遍历填充到结构中,Fill方法大概执行了下面这些命令:

#region 通过sqldatareader获取表的结构信息
                SqlCommand sqlCommand = new SqlCommand(sql, conn);
                conn.Open();
                DataTable table = new DataTable();
                SqlDataReader reader = sqlCommand.ExecuteReader();
                for (int i = 0; i < reader.FieldCount; i++)
                {
                    DataColumn column = new DataColumn(reader.GetName(i));
                    column.DataType = reader.GetFieldType(i);
                    table.Columns.Add(column);
                }
                while (reader.Read())
                {
                    DataRow row = table.NewRow();
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        row[0] = reader[0];
                    }
                    table.Rows.Add(row);
                }
                set.Tables.Add(table);
                #endregion

除此之外,SqlDataAdapter类还可以用来更新数据库中的数据:

using (SqlConnection conn = new SqlConnection(connStr))
                {
                    //构造适配器对象
                    SqlDataAdapter adapter = new SqlDataAdapter();
                    //构造修改语句
                    string sql = "update employee set [email protected],[email protected] where [email protected]";
                    //构造用于修改的命令对象
                    SqlCommand cmdUpdate = new SqlCommand(sql, conn);
                    cmdUpdate.Parameters.Add("@name", SqlDbType.NVarChar, 10, "ename");
                    cmdUpdate.Parameters.Add("@code", SqlDbType.VarChar, 18, "ecode");
                    cmdUpdate.Parameters.Add("@id", SqlDbType.Int, 4, "eid");
                    //构造适配器的修改命令属性
                    adapter.UpdateCommand = cmdUpdate;

                    conn.Open();
                    //完成数据更新,会逐条的对比数据
                    //情况1:dt中有的数据,而数据库中没有,则会调用InsertCommand执行
                    //情况2:dt中没有的数据,而数据库中有,则会调用DeleteCommand执行
                    //情况3:都有,但是不一样,则会调用UpdateCommand执行

                    adapter.Update(dt);
                }

但是,使用Fill方法是将所有数据全部填充到DataSet结构中,这其中可能会发生很多问题,一个建议是使用异步来写。另一个要考虑的是假如内存不够,还会出现不可预知的错误,对于这个问题,我们可以考虑使用分页或流来完成来完成Fill。

时间: 2024-09-28 01:26:27

ADO.NET开发技巧(5)-第二种方法的相关文章

iOS 清理缓存功能的实现第二种方法

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 /**  *  清理缓存第二种方法  *  *  @param sender <#sender description#>  */ - (void)clearCache:(id)sender {     //彻底清除

2、struct2开发action 的三种方法以及通配符、路径匹配原则、常量

struct2 开发action 的三种方法 1.继承ActionSupport public class UserAction extends ActionSupport { // Action中业务处理方法 public String login() { System.out.println("UserAction.login()"); // return "success"; return SUCCESS; } } 2.实现Action public clas

教你关闭AOPR的第二种方法

众所周知,点击AOPR软件界面右上角红色的关闭按钮即可关闭该Office密码破解软件,但是在某些情况下"关闭"可能不可用,此时掌握其他关闭软件的方法十分必要.本文指导关闭Advanced Office Password Recovery的第二种方法. AOPR软件文件菜单中的"退出"命令 一般打开或保存文件时,用户使用Advanced Office Password Recovery文件菜单较为频繁,但是在这项菜单下还隐藏着一项"退出"命令哦,如

struts2开发action 的三种方法以及通配符、路径匹配原则、常量

struts2开发action 的三种方法 1.继承ActionSupport public class UserAction extends ActionSupport { // Action中业务处理方法 public String login() { System.out.println("UserAction.login()"); // return "success"; return SUCCESS; } } 2.实现Action public class

Java Web -- Servlet(4) 开发Servlet的三种方法、配置Servlet详解、Servlet的生命周期(1)

一.实现Servlet接口 通过实现Servlet接口来了解Servlet的生命周期 (1)以规范的形式创建一个web应用(即在webapps目录下创建一个web应用) 创建web应用 (2)classes目录下创建一个.java(该java文件为实现Servlet接口) 创建文件夹MyFirstServlet.java 代码如下: package com.focus; import javax.servlet.*; import javax.servlet.http.*; import jav

Android开发中退出程序几种方法

参考:http://johncookie.iteye.com/blog/890734 Android程序有很多Activity,比如说主窗口A,调用了子窗口B,子窗口B又调用子窗口C,back返回子窗口B后,在B中如何关闭整个Android应用程序呢? 这里用到几种方法. 1.finish()方法 finish是Activity的类,仅仅针对Activity,当调用finish()时,只是将活动推向后台,并没有立即释放内存,活动的资源并没有被清理:调用finish()方法会执行Activity.

线程创建的第二种方法

第一种方法是继承并且重写run方法(不推荐使用) 第二种就是有爹的情况,用实现接口的形式拓展功能--实现Runnable接口 Runnable中只有run()方法 今天复习同步线程代码时候卡在一个问题上: class SynThread implements Runnable { run() { } } class Main { public static void main(string [] args) { SynThread syn=new SynThread(); Thread a=ne

SSH 框架打开项目自动执行action的第二种方法

web.xml还是什么不配置 <welcome-file-list> <welcome-file></welcome-file> </welcome-file-list> struts.xml加上这个 <default-action-ref name="index" /> 同时原来的修改为这样 <action name="index" class="index"> <r

Android客户端和服务器端数据交互的第二种方法

网上有很多例子来演示Android客户端和服务器端数据如何实现交互不过这些例子大多比较繁杂,对于初学者来说这是不利的,现在介绍几种代码简单.逻辑清晰的交互例子,本篇博客介绍第二种: 一.服务器端: 代码1:添加名为"AndroidServerServlet.java"的文件 package com.ghj.packageofservlet; import java.io.IOException; import java.io.PrintWriter; import javax.serv