许明会的计算机技术主页

Language:C,C++,.NET Framework(C#)
Thinking:Design Pattern,Algorithm,WPF,Windows Internals
Database:SQLServer,Oracle,MySQL,PostSQL
IT:MCITP,Exchange,Lync,Virtualization,CCNP

导航

DataAdapter数据集DataSet和数据库的同步(2):使用DataAdapter来更新数据集

/*--===------------------------------------------===---
使用DataAdapter来更新数据集
//--===------------------------------------------===---
数据适配器DataAdapter的方法:
1.Fill:把数据从数据源加载到数据集DataSet中。
2.Update:把数据从数据集加载到数据源中。
//--===------------------------------------------===---
Fill方法:
1.Fill(DataSet)
2.Fill(DataTable)
3.Fill(DataSet,tableName);
4.Fill(DataTable,DataReader):用指定的DataReader填充数据表
★默认情况下,调用DataAdapter的Fill方法时,除了会填充DataSet之外,还会自动调用DataSet.AcceptChanges,调用后所有的行状态都不是“新改变的”,此时Original和Current的值是一样的。
★如果希望从多个数据源填充一个DataSet,再将其写回另外一个数据存储,这时要把DataAdapter的属性AcceptChangesDuringFill设置为false,以便让结果行表现为新添加的行。
Update方法:
1.Update(DataSet):根据指定的数据集中的数据表更新数据源
2.Update(DataTable):根据指定的数据表更新数据源
3.Update(dataRows):根据指定的数据行数组更新数据源
当调用Update方法时,DataAdapter将分析已作出的更改并执行相应的命令(Insert,Update,Delete). 当DataAdapter遇到DataRow的更改时,他将使用InsertCommand, UpdateCommand, DeleteCommand来处理更改. 如此就可以通过在设计时制定命令语法并在可能时通过使用存储过程来尽量提高Ado.net应用程序的性能. 在调用Update命令前,保证用于更改数据的3个Command存在,否则将引发异常.

            许明会    2007年12月22日 23:27:31
--===------------------------------------------===---
*/

using System;
using System.Data;
using System.Data.SqlClient;

namespace xumh
{
    
public class runMyApp
    
{
        
static void ShowTable(DataTable dataTable)
        
{
            
foreach(DataRow row in dataTable.Rows)
            
{
                
for(int i=0;i<dataTable.Columns.Count; i++)
                    Console.Write(
"{0}\t",row[i]);
                Console.WriteLine();
            }

        }

        
//
        static void UpdateEmployees()
        
{
            SqlConnection cn 
= new SqlConnection(@"server=.; database=northwind; integrated security=true ");
            
//显示原始数据
            SqlDataAdapter da = new SqlDataAdapter("select employeeid,firstname,lastname,title from employees",cn);
            DataSet dsEmployees 
= new DataSet();
            da.Fill(dsEmployees);
            ShowTable(dsEmployees.Tables[
0]);
            
//准备UpdateCommand
            dsEmployees.Tables.Clear();
            da.UpdateCommand 
= new SqlCommand("update Employees set firstname = @firstname where EmployeeID=@EmployeeID",cn);
            da.UpdateCommand.Parameters.Add(
"@firstname", SqlDbType.NVarChar,10,"firstName");
            SqlParameter emID 
= da.UpdateCommand.Parameters.Add("@EmployeeID",SqlDbType.Int);
            emID.SourceColumn 
= "EmployeeID";
            emID.SourceVersion 
= DataRowVersion.Original;
            
//填充数据集,更改数据集,提交数据集:可观察各行的RowVersion
            da.Fill(dsEmployees,"Employees");
            dsEmployees.Tables[
"Employees"].Rows[0]["firstname"="Nancy";// System.DateTime.Now.ToString();
            da.Update(dsEmployees,"Employees");
            
//重新显示数据
            ShowTable(dsEmployees.Tables[0]);
        }

        
//
        static void InsertEmployees()
        
{
            SqlConnection cn 
= new SqlConnection(@"server=.; database=northwind; integrated security=true ");
            
//显示原始数据
            SqlDataAdapter da = new SqlDataAdapter("select employeeid,firstname,lastname,title from employees",cn);
            DataSet dsEmployees 
= new DataSet();
            da.Fill(dsEmployees);
            ShowTable(dsEmployees.Tables[
0]);
            
//准备要InsertCommand
            da.InsertCommand = new SqlCommand("insert into Employees(firstname,lastname) values(@firstname,@lastname) ",cn);
            da.InsertCommand.Parameters.Add(
"@firstname",SqlDbType.NVarChar,10,"FirstName");
            da.InsertCommand.Parameters.Add(
"@lastname",SqlDbType.NVarChar,20,"lastname");
            
//填充数据集
            DataRow row = dsEmployees.Tables[0].NewRow();
            row[
"firstname"= "Xu";
            row[
"lastname"= "Minghui";
            dsEmployees.Tables[
0].Rows.Add(row);
            da.Update(dsEmployees);
            
//显示新数据
            ShowTable(dsEmployees.Tables[0]);
        }


        
//
        static void Main()
        
{
            
//UpdateEmployees();
            InsertEmployees();
        }

    }
;
}

posted on 2007-12-23 00:16  许明会  阅读(829)  评论(0编辑  收藏  举报