求DataSet与DataAdapter的区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求DataSet与DataAdapter的区别?相关的知识,希望对你有一定的参考价值。

SqlDataAdapter 是 DataSet 和 SQL Server 之间的桥接器,用于检索和保存数据。SqlDataAdapter 通过对数据源使用适当的 Transact-SQL 语句映射 Fill(它可更改 DataSet 中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 DataSet 中的数据)来提供这一桥接。

当 SqlDataAdapter 填充 DataSet 时,它将为返回的数据创建必要的表和列(如果它们尚不存在)。但是,除非 MissingSchemaAction 属性设置为 AddWithKey,否则这个隐式创建的架构中就将不包括主键信息。也可以在使用 FillSchema 为数据集填充数据前,让 SqlDataAdapter 创建 DataSet 的架构(包括主键信息)。有关更多信息,请参见向 DataSet 添加现有约束。

SqlDataAdapter 与 SqlConnection 和 SqlCommand 一起使用,以便在连接到 Microsoft SQL Server 数据库时提高性能。

SqlDataAdapter 还包括 SelectCommand、InsertCommand、DeleteCommand、UpdateCommand 和 TableMappings 属性,使数据的加载和更新更加方便。

示例
以下示例使用 SqlCommand、SqlDataAdapter 和 SqlConnection,从数据库选择记录,并用选定的行填充 DataSet。然后返回已填充的 DataSet。为完成此任务,向该方法传递一个已初始化的 DataSet、一个连接字符串和一个查询字符串,后者是一个 Transact-SQL SELECT 语句。
public DataSet SelectSqlSrvRows(DataSet dataset,string connection,string query)

SqlConnection conn = new SqlConnection(connection);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(query, conn);
adapter.Fill(dataset);
return dataset;
参考技术A DataSet
作用:DataSet,DataAdapter读取数据。
问:什么是DataAdapter?
答:DataAdapter对象在DataSet与数据之间起桥梁作用
string strConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串
SqlConnection ConnSql=new SqlConnection (strConn); //Sql链接类的实例化
ConnSql.Open ();//打开数据库
string strSQL="SELECT * FROM 表名1 "; //要执行的SQL语句
SqlDataAdapter da=new SqlDataAdapter(strSQL,ConnSql); //创建DataAdapter数据适配器实例
DataSet ds=new DataSet();//创建DataSet实例
da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令
ConnSql.Close ();//关闭数据库
参考技术B DataAdapter 用作 DataSet 和数据源之间的桥接器以便检索和保存数据。DataAdapter 通过映射Fill(这更改了 DataSet 中的数据以便与数据源中的数据相匹配)和Update(这更改了数据源中的数据以便与 DataSet 中的数据相匹配)来提供这一桥接器。 参考技术C dataconnection是连接数据库用的,就像公路,是必须的。
dataset用来存放数据集是个巨大的仓库,datatable是小仓库,像集装箱。
那么,dataadapter就是货车。用来取或者存货物。

DataSet和DataTable区别,ConnectionCommandDataReaderDataAdapterDataSet

DataSet和DataTable区别  
 da.Fill(ds, "alias_1");                            //使用DataAdapter的Fill方法(填充),调用SELECT命令,别名       
 dataGridView8.DataSource = ds.Tables[0];

 da.Fill(dt);       //直接填充给dt
 flex.DataSource = dt;
 
 ds.Tables[0]==dt
 DateSet是数据在内存中的缓存,是保存数据的数据结构,相当于一个虚拟的数据库,他可以包含多个DateTable
 好像winform里面绑定只能绑定dataTable
 简单而言,dataset和datatable都是ADO的非连接层,dataset是一个位于内存中表示外部数据的对象,它是一个类型,该类型维护三个内部强类型集合,其中包括了datatablecollection,  dataset的tables属性能够访问包含多个datatable的datatablecollection


 










        private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection("server=.;database=DB_JXC;uid=sa;pwd=PSWD123");
            conn.Open();
            if (conn.State==ConnectionState.Open)
            {
                label1.Text = "数控库已经连接并打开";
            }
        }


        private void button2_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection("server=.;database=DB_JXC;uid=sa;pwd=PSWD123");
            conn.Open();
            if (conn.State == ConnectionState.Open)
            {
                label2.Text = "数控库已经连接并打开";
            }

            conn.Close();
            if (conn.State==ConnectionState.Closed)
            {
                label2.Text = "数控打开后又关闭了";
            }
        }


        private void button3_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection("server=.;database=DB_JXC;uid=sa;pwd=PSWD123");
            conn.Open();
            if (conn.State == ConnectionState.Open)
            {
                label3.Text = "数控库已经连接并打开";
            }

            conn.Dispose();
            label3.Text = "conn.Dispose()";            
        }

        private void button4_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection("server=.;database=DB_JXC;uid=sa;pwd=PSWD123");
            conn.Open();
            if (conn.State == ConnectionState.Open)
            {
                label4.Text = "数控库已经连接并打开";
            }

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = "select count(*) from khxjd";
            cmd.CommandType = CommandType.Text;

            int i = Convert.ToInt32(cmd.ExecuteScalar());
            label4.Text = "表中有" + i.ToString() + "条记录!";

        }

        private void button5_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection("server=.;database=DB_JXC;uid=sa;pwd=PSWD123");
            conn.Open();
            if (conn.State == ConnectionState.Open)
            {
                label5.Text = "数控库已经连接并打开";
            }

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = "update khxjd set qty=100+isnull(qty,0)";
            cmd.CommandType = CommandType.Text;

            int i = Convert.ToInt32(cmd.ExecuteNonQuery());
            label5.Text = "更新了表中" + i.ToString() + "条记录!";
        }


        //sqlDataReader,是向前的。
        //针对于一个sqlConnection,创建多个sqlDataReader,要先关闭上一个sqlDataReader,才能使用下一个sqlDataReader.

        private void button6_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection("server=.;database=DB_JXC;uid=sa;pwd=PSWD123");
            conn.Open();
            if (conn.State == ConnectionState.Open)
            {
                label6.Text = "数控库已经连接并打开";
            }

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = "select top 5 khxjdh,itm,nsn,prd_name_eng,prd_name_chs,qty from khxjd";
            cmd.CommandType = CommandType.Text;
                        
            SqlDataReader sdr= cmd.ExecuteReader();
            while (sdr.Read())
            {
                label6.Text = label6.Text   + "," + sdr[1].ToString();
            }

            label6.Text = label6.Text + "。读取完成!";


        }

        private void button7_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection("server=.;database=DB_JXC;uid=sa;pwd=PSWD123");
            conn.Open();
            if (conn.State == ConnectionState.Open)
            {
                label7.Text = "数控库已经连接并打开";
            }

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = "select top 5 khxjdh,itm,nsn,prd_name_eng,prd_name_chs,qty from khxjd";
            cmd.CommandType = CommandType.Text;

            SqlDataReader sdr = cmd.ExecuteReader();
            if (sdr.HasRows) 
            {
                label7.Text = "有数据";
            }
            else
            {
                label7.Text = "无数据";
            }

            sdr.Close(); 

        }


        //SqlDataAdapter:DataAdapter对象在DataSet与数据之间起桥梁作用
        private void button8_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection("server=.;database=DB_JXC;uid=sa;pwd=PSWD123");

            //conn.Open();     //说明一下:使用 SqlDataAdapter时,只要SqlConnection有效就行,不需要 打开!!!

            if (conn.State == ConnectionState.Open)
            {
                label8.Text = "数控库已经连接并打开";
            }
            else
            {
                label8.Text = "数控库还未打开";  //ok
            }

            //SqlCommand cmd = new SqlCommand();
            //cmd.Connection = conn;            
            //SqlCommand cmd = new SqlCommand( "select top 5 khxjdh,itm,nsn,prd_name_eng,prd_name_chs,qty from khxjd",conn);           
            //SqlDataAdapter da = new SqlDataAdapter();
            //da.SelectCommand = cmd;

            //DataSet ds = new DataSet();
            // da.Fill(ds, "alias_1");                         //使用DataAdapter的Fill方法(填充),调用SELECT命令,别名
            //dataGridView8.DataSource = ds.Tables[0];

            


            SqlDataAdapter da = new SqlDataAdapter("select top 5 khxjdh,itm,nsn,prd_name_eng,prd_name_chs,qty from khxjd", conn); //创建DataAdapter数据适配器实例

            if (conn.State == ConnectionState.Open)
            {
                label8.Text = label8.Text+ "2.数控库已经连接并打开";
            }
            else
            {
                label8.Text = label8.Text + "2.数控库还未打开";  //ok
            }

            DataSet ds = new DataSet();                        //创建DataSet实例
            da.Fill(ds, "alias_1");                            //使用DataAdapter的Fill方法(填充),调用SELECT命令,别名       
            dataGridView8.DataSource = ds.Tables[0];
            
            //label8.Text = "数控查询完成";

            if (conn.State == ConnectionState.Open)
            {
                label8.Text = label8.Text + "3.数控库已经连接并打开";
            }
            else
            {
                label8.Text = label8.Text + "3.数控库还未打开";  //ok
            }

            //conn.Close();                                      //关闭数据库            
        }


// load table from db
string sql = "select * from products";
string conn = GetConnectionString();
System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(sql, conn);


DataTable dt = new DataTable();
da.Fill(dt);       //直接填充给dt

// bind to grid
_flex.Cols[0].Width = 20;
_flex.ShowCursor = true;
_flex.DataSource = dt;

// add calculated field
dt.Columns.Add("ValueInStock", typeof(decimal), "UnitPrice * UnitsInStock");
_flex.Cols["ValueInStock"].Format = "c";

// add unbound column
Column col = _flex.Cols.Add();
col.Name = col.Caption = "Unbound";

 

以上是关于求DataSet与DataAdapter的区别?的主要内容,如果未能解决你的问题,请参考以下文章

DataAdapter.Fill(数据集)

DataCommand和DataAdapter

DataAdapter 是啥意思啊 应该怎样用啊???有啥作用啊???

ADO.NET_DataSet类,DataAdapter类,DataTable类

dataset 和 datareader对象有啥区别

DataSet和DataTable区别