예제 #1
0
        public void conectaBD()
        {
            SqlCeConnection PathBD = new SqlCeConnection("Data Source=C:\\Facturacion\\Facturacion\\BaseDeDatos.sdf;Persist Security Info=False;");
            //abre la conexion
            try
            {
                da = new SqlCeDataAdapter("SELECT * FROM USUARIOS ORDER BY ID_USUARIO", PathBD);
                // Crear los comandos de insertar, actualizar y eliminar
                SqlCeCommandBuilder cb = new SqlCeCommandBuilder(da);
                // Asignar los comandos al DataAdapter
                // (se supone que lo hace automáticamente, pero...)
                da.UpdateCommand = cb.GetUpdateCommand();
                da.InsertCommand = cb.GetInsertCommand();
                da.DeleteCommand = cb.GetDeleteCommand();
                dt = new DataTable();
                // Llenar la tabla con los datos indicados
                da.Fill(dt);

                PathBD.Open();
            }
            catch (Exception w)
            {
                MessageBox.Show(w.ToString());
                return;
            }
        }
예제 #2
0
        public override DbDataAdapter CreateAdapter(Table table, TableFilter filter)
        {
            var sqlTable = table as SqlCeTable;

            if (sqlTable == null)
            {
                throw new InvalidOperationException("Table should be an SqlCeTable");
            }
            var adapter = new SqlCeDataAdapter(table.GetBaseSelectCommandText(filter), this.connection);

            if (!table.IsReadOnly)
            {
                var builder = new SqlCeCommandBuilder(adapter);
                builder.ConflictOption = ConflictOption.OverwriteChanges;
                try {
                    adapter.UpdateCommand = builder.GetUpdateCommand();
                    adapter.InsertCommand = builder.GetInsertCommand();
                    adapter.DeleteCommand = builder.GetDeleteCommand();
                } catch (InvalidOperationException) {
                    sqlTable.SetReadOnly(true);
                    return(adapter);
                }
            }
            return(adapter);
        }
예제 #3
0
        public void conectaBD()
        {
            //busca la path de la aplicacion y le agrega la base de datos en string
            string path = "C:\\EM Software - Control_De_Invitados\\EM Software - Control_De_Invitados\\BD\\Control_de_invitados_BD.sdf;Persist Security Info=False;";
            //             C:\EM Software - Control_De_Invitados\EM Software - Control_De_Invitados\BD
            SqlCeConnection PathBD = new SqlCeConnection("Data source="+path);
            //abre la conexion
            try
            {
                string SeleccionaTodosLosDatos = "SELECT * FROM Invitados ORDER BY Num_invitado";
                da = new SqlCeDataAdapter(SeleccionaTodosLosDatos, PathBD);

                // Crear los coma;ndos de insertar, actualizar y eliminar
                SqlCeCommandBuilder cb = new SqlCeCommandBuilder(da);
                // Asignar los comandos al DataAdapter
                // (se supone que lo hace automáticamente, pero...)
                da.UpdateCommand = cb.GetUpdateCommand();
                da.InsertCommand = cb.GetInsertCommand();
                da.DeleteCommand = cb.GetDeleteCommand();
                dt = new DataTable();
                // Llenar la tabla con los datos indicados
                da.Fill(dt);

                PathBD.Open();
            }
            catch (Exception w)
            {
                MessageBox.Show(w.ToString());
            }
        }
예제 #4
0
        private void Form1_Load(object sender, EventArgs e)
        {
            // gridPersons.DataSource =
            System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\Faces");
            try
            {
                sconn = new SqlCeConnection("Data Source=" + System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) +
                                            @"\FaceDataBase.sdf;Persist Security Info=false;Password=sasol321;");
                scommand = new SqlCeCommand("select * from Persons", sconn);

                sda = new SqlCeDataAdapter(scommand);
                cb  = new SqlCeCommandBuilder(sda);
                sda.InsertCommand = cb.GetInsertCommand();
                sda.DeleteCommand = cb.GetDeleteCommand();
                sda.UpdateCommand = cb.GetUpdateCommand();
                personTable       = new DataTable();

                //gridPersons.AutoGenerateColumns = true;
                gridPersons.DataSource = personTable;
                sda.Fill(personTable);

                gridPersons.Columns[0].HeaderText = "شناسه";

                gridPersons.Columns[1].HeaderText = "نام";

                gridPersons.Columns[2].HeaderText = "سن";

                gridPersons.Columns[3].HeaderText = "جنسیت";

                gridPersons.Columns[4].HeaderText = "مسیر";
                gridPersons.Columns[5].HeaderText = "تصویر";
                ((DataGridViewImageColumn)gridPersons.Columns[5]).ImageLayout = DataGridViewImageCellLayout.Stretch;
                gridPersons.Columns[5].Width = 150;
                //gridPersons.Columns[4].Width = 100;
                for (int i = 0; i < gridPersons.Rows.Count; i++)
                {
                    gridPersons.Rows[i].Height = 150;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            capturer = new FaceLib.Capturer();

            faceExaminer = new FaceLib.FaceExaminer();
            faceTrainer  = new FaceLib.FaceTrainer();
        }
예제 #5
0
        public bool Init()
        {
            Directory.CreateDirectory(FolderName);
            this.Message  += new MessageEventHandler(DefaultViewer);
            imageConverter = new ImageConverter();
            BYTE_ARRAY     = Type.GetType("System.Byte[]");
            connection     = new SqlCeConnection(string.Format(
                                                     "data source={0}; database password=;max database size={1}",
                                                     FileName, MaxSize));
            if (!File.Exists(FileName) || AddExsitingDatabase)
            {
                this.createTables();
                Directory.CreateDirectory(this.FolderName);
            }

            daSession = new SqlCeDataAdapter("SELECT * FROM sessions", connection);
            SqlCeCommandBuilder cmdb = new SqlCeCommandBuilder(daSession);

            daSession.InsertCommand = cmdb.GetInsertCommand();
            daSession.UpdateCommand = cmdb.GetUpdateCommand();
            daSession.DeleteCommand = cmdb.GetDeleteCommand();

            daBitmap = new SqlCeDataAdapter("SELECT * FROM bitmaps", connection);
            cmdb     = new SqlCeCommandBuilder(daBitmap);
            daBitmap.InsertCommand = cmdb.GetInsertCommand();
            daBitmap.UpdateCommand = cmdb.GetUpdateCommand();
            daBitmap.DeleteCommand = cmdb.GetDeleteCommand();

            daSignal = new SqlCeDataAdapter("SELECT * FROM signals", connection);
            cmdb     = new SqlCeCommandBuilder(daSignal);
            daSignal.InsertCommand = cmdb.GetInsertCommand();
            daSignal.UpdateCommand = cmdb.GetUpdateCommand();
            daSignal.DeleteCommand = cmdb.GetDeleteCommand();

            daHqimg = new SqlCeDataAdapter("SELECT * FROM hqimgs", connection);
            cmdb    = new SqlCeCommandBuilder(daHqimg);
            daHqimg.InsertCommand = cmdb.GetInsertCommand();
            daHqimg.UpdateCommand = cmdb.GetUpdateCommand();
            daHqimg.DeleteCommand = cmdb.GetDeleteCommand();

            connection.Open();
            return(true);
        }
예제 #6
0
 public override int BlockCommand(DataTable dt)
 {
     lock (lockObject)
     {
         int result = 0;
         if (!CheckConn())
         {
             return(0);
         }
         if (dt.TableName == "")
         {
             All.Class.Error.Add("无法完成批量数据更新,数据表名不能为空");
             All.Class.Error.Add(Environment.StackTrace);
             return(0);
         }
         try
         {
             using (SqlCeCommand cmd = new SqlCeCommand(string.Format("select * from {0}", dt.TableName), conn))
             {
                 using (SqlCeDataAdapter ada = new SqlCeDataAdapter(cmd))
                 {
                     using (SqlCeCommandBuilder scb = new SqlCeCommandBuilder(ada))
                     {
                         ada.InsertCommand = scb.GetInsertCommand();
                         ada.DeleteCommand = scb.GetDeleteCommand();
                         ada.UpdateCommand = scb.GetUpdateCommand();
                         result            = ada.Update(dt);
                     }
                 }
             }
         }
         catch (Exception e)
         {
             All.Class.Error.Add(string.Format("出错Table为:{0}", dt.TableName));
             All.Class.Error.Add(e);//数据库中一定要有主键,不然当前方法会出错。即没有办法生成删除命令
         }
         return(result);
     }
 }
예제 #7
0
        public void DAL_SaveToTable(DataTable dt, string sTableName, string sExecMode)
        {
            string sSql = "";

            try
            {
                sSql = "SELECT * FROM " + sTableName + " Where 1=0";
                //SqlConnection connection = new SqlConnection(GlobalVariables.sMSSQL);
                SqlCeDataAdapter    da = new SqlCeDataAdapter(sSql, GV.conSQLCE);
                SqlCeCommandBuilder cb = new SqlCeCommandBuilder(da);
                SQLCEConOpen();

                cb.ConflictOption = ConflictOption.OverwriteChanges;
                if (sExecMode == "New")
                {
                    da.UpdateCommand = cb.GetInsertCommand();
                }
                else if (sExecMode == "Delete")
                {
                    da.UpdateCommand = cb.GetDeleteCommand();
                }
                else if (sExecMode == "Update")
                {
                    da.UpdateCommand = cb.GetUpdateCommand();
                }
                //da.UpdateCommand.CommandTimeout = 600;
                da.Update(dt);
                //GlobalVariables.conSQLCE.Close();
            }
            catch (Exception ex)
            {
                GM.Error_Log(ex, true, true);
                //if (GM.IsNetWorkDown())
                //    MessageBoxEx.Show("Network Down." + Environment.NewLine + "Check your LAN or contact System Administrator.", "Campaign Manager", MessageBoxButtons.OK, MessageBoxIcon.Error);
                //else
                //    //MessageBoxEx.Show(ex.Message, "Campaign Manager", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
예제 #8
0
        public void TestRowState()
        {
            this.tracer.WriteLine("测试属性 RowState");

            #region "是否测试从不同位置载入 DataRow 后 RowState 的状态?"
            if (this.tracer.WaitInputAChar("是否测试从不同位置载入 DataRow 后 RowState 的状态?") == 'y')
            {
                try
                {
                    using (DataSet dataSet = new DataSet())
                    {
                        File.WriteAllText(@"temp.xml", "<?xml version=\"1.0\" encoding=\"utf-8\" ?><TestDS xmlns=\"http://tempuri.org/TestDS.xsd\">" +
                                          "<Student>" +
                                          "<Name>小明</Name>" +
                                          "<Age>12</Age>" +
                                          "</Student>" +
                                          "</TestDS>");
                        this.tracer.WriteLine("写入包含表 Student(Name, Age) 的 xml 到 temp.xml");

                        try
                        {
                            dataSet.ReadXml(@"temp.xml");
                            this.tracer.WriteLine("读取 temp.xml");

                            foreach (DataTable table in dataSet.Tables)
                            {
                                this.tracer.WriteLine(string.Format("表 {0}", table.TableName));

                                foreach (DataRow row in table.Rows)
                                {
                                    this.tracer.WriteLine(string.Format("状态: {0}", row.RowState));
                                }
                            }
                        }
                        catch (Exception err)
                        { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }
                    }


                    using (DataSet dataSet = new DataSet())
                    {
                        dataSet.Tables.Add("Student");
                        dataSet.Tables["Student"].Columns.AddRange(
                            new DataColumn[] {
                            new DataColumn("Name", typeof(string)),
                            new DataColumn("Age", typeof(int))
                        }
                            );

                        this.tracer.WriteLine("创建表 Student(Name, Age) 到数据集");

                        dataSet.Tables["Student"].Rows.Add("小明", "11");
                        this.tracer.WriteLine("向表 Student 添加数据");

                        foreach (DataTable table in dataSet.Tables)
                        {
                            this.tracer.WriteLine(string.Format("表 {0}", table.TableName));

                            foreach (DataRow row in table.Rows)
                            {
                                this.tracer.WriteLine(string.Format("状态: {0}", row.RowState));
                            }
                        }
                    }


                    using (DataSet dataSet = new DataSet())
                    {
                        /*
                         * Test.sdf 始终复制到 bin 目录下
                         * */
                        SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");

                        try
                        {
                            adapter.Fill(dataSet);
                            this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

                            foreach (DataTable table in dataSet.Tables)
                            {
                                this.tracer.WriteLine(string.Format("表 {0}", table.TableName));

                                foreach (DataRow row in table.Rows)
                                {
                                    this.tracer.WriteLine(string.Format("状态: {0}", row.RowState));
                                }
                            }
                        }
                        catch (Exception err)
                        { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }
                    }


                    using (DataSet dataSet = new DataSet())
                    {
                        /*
                         * Test.sdf 始终复制到 bin 目录下
                         * */
                        SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");
                        adapter.AcceptChangesDuringFill = false;

                        this.tracer.WriteLine(string.Format("将 AcceptChangesDuringFill 属性设置为 false"));

                        try
                        {
                            adapter.Fill(dataSet);
                            this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

                            foreach (DataTable table in dataSet.Tables)
                            {
                                this.tracer.WriteLine(string.Format("表 {0}", table.TableName));

                                foreach (DataRow row in table.Rows)
                                {
                                    this.tracer.WriteLine(string.Format("状态: {0}", row.RowState));
                                }
                            }
                        }
                        catch (Exception err)
                        { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }
                    }
                }
                catch (Exception err)
                { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

                this.tracer.WaitPressEnter();
            }
            #endregion

            #region "是否测试修改, 更改, 删除后的 DataRow.RowState 转化?"
            if (this.tracer.WaitInputAChar("是否测试修改, 更改, 删除后的 DataRow.RowState 转化?") == 'y')
            {
                try
                {
                    using (DataSet dataSet = new DataSet())
                    {
                        /*
                         * Test.sdf 始终复制到 bin 目录下
                         * */
                        SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");

                        try
                        {
                            adapter.Fill(dataSet);
                            this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

                            this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", dataSet.Tables[0].Rows[0].RowState));

                            int age = Convert.ToInt32(dataSet.Tables[0].Rows[0]["Age"]);

                            dataSet.Tables[0].Rows[0]["Age"] = 22;
                            this.tracer.WriteLine(string.Format("修改表 Student 第 1 条记录的年龄后, 状态为: {0}", dataSet.Tables[0].Rows[0].RowState));

                            dataSet.Tables[0].Rows[0]["Age"] = age;
                            this.tracer.WriteLine(string.Format("修改表 Student 第 1 条记录的年龄为原值后, 状态为: {0}", dataSet.Tables[0].Rows[0].RowState));

                            SqlCeCommandBuilder builder = new SqlCeCommandBuilder(adapter);
                            adapter.UpdateCommand = builder.GetUpdateCommand();
                            adapter.Update(dataSet);
                            this.tracer.WriteLine("将数据集的修改更新到本地 Test.sdf 数据库");

                            this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", dataSet.Tables[0].Rows[0].RowState));
                        }
                        catch (Exception err)
                        { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }
                    }


                    using (DataSet dataSet = new DataSet())
                    {
                        dataSet.Tables.Add("Student");
                        dataSet.Tables["Student"].Columns.AddRange(
                            new DataColumn[] {
                            new DataColumn("Name", typeof(string)),
                            new DataColumn("Age", typeof(int))
                        }
                            );

                        this.tracer.WriteLine("创建表 Student(Name, Age) 到数据集");

                        dataSet.Tables["Student"].Rows.Add("小明", "11");
                        this.tracer.WriteLine("向表 Student 添加数据");

                        this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", dataSet.Tables["Student"].Rows[0].RowState));

                        dataSet.Tables["Student"].Rows[0]["Age"] = 22;
                        this.tracer.WriteLine(string.Format("修改表 Student 第 1 条记录的年龄后, 状态为: {0}", dataSet.Tables["Student"].Rows[0].RowState));

                        dataSet.Tables["Student"].Rows[0]["Name"] = "jack";
                        this.tracer.WriteLine(string.Format("修改表 Student 第 1 条记录的姓名后, 状态为: {0}", dataSet.Tables["Student"].Rows[0].RowState));
                    }


                    using (DataSet dataSet = new DataSet())
                    {
                        /*
                         * Test.sdf 始终复制到 bin 目录下
                         * */
                        SqlCeDataAdapter    adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");
                        SqlCeCommandBuilder builder = new SqlCeCommandBuilder(adapter);
                        adapter.DeleteCommand = builder.GetDeleteCommand();
                        adapter.UpdateCommand = builder.GetUpdateCommand();
                        adapter.InsertCommand = builder.GetInsertCommand();

                        adapter.AcceptChangesDuringUpdate = false;

                        this.tracer.WriteLine(string.Format("将 AcceptChangesDuringUpdate 属性设置为 false"));


                        try
                        {
                            adapter.Fill(dataSet);
                            this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

                            DataRow newRow = dataSet.Tables[0].Rows.Add("小心心", 10);

                            dataSet.Tables[0].Rows[0]["Age"] = 22;
                            dataSet.Tables[0].Rows[1].Delete();
                            this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", dataSet.Tables[0].Rows[0].RowState));
                            this.tracer.WriteLine(string.Format("表 Student 第 2 条记录的状态为: {0}", dataSet.Tables[0].Rows[1].RowState));
                            this.tracer.WriteLine(string.Format("表 Student 第 3 条记录的状态为: {0}", dataSet.Tables[0].Rows[2].RowState));
                            this.tracer.WriteLine(string.Format("表 Student 新记录的状态为: {0}", newRow.RowState));

                            adapter.Update(dataSet);
                            this.tracer.WriteLine("将数据集更新到本地 Test.sdf 数据库");

                            this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", dataSet.Tables[0].Rows[0].RowState));
                            this.tracer.WriteLine(string.Format("表 Student 第 2 条记录的状态为: {0}", dataSet.Tables[0].Rows[1].RowState));
                            this.tracer.WriteLine(string.Format("表 Student 第 3 条记录的状态为: {0}", dataSet.Tables[0].Rows[2].RowState));
                            this.tracer.WriteLine(string.Format("表 Student 新记录的状态为: {0}", newRow.RowState));
                        }
                        catch (Exception err)
                        { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }
                    }


                    using (DataSet dataSet = new DataSet())
                    {
                        /*
                         * Test.sdf 始终复制到 bin 目录下
                         * */
                        SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");

                        try
                        {
                            adapter.Fill(dataSet);
                            this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

                            this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", dataSet.Tables[0].Rows[0].RowState));
                            this.tracer.WriteLine(string.Format("表 Student 第 2 条记录的状态为: {0}", dataSet.Tables[0].Rows[1].RowState));

                            DataRow row1 = dataSet.Tables[0].Rows[0];
                            DataRow row2 = dataSet.Tables[0].Rows[1];
                            row1.Delete();
                            this.tracer.WriteLine(string.Format("对第 1 条记录调用 Delete 方法后状态为 {0}", row1.RowState));
                            dataSet.Tables[0].Rows.Remove(row2);
                            this.tracer.WriteLine(string.Format("对第 2 条记录调用 Remove 方法后状态为 {0}", row2.RowState));
                        }
                        catch (Exception err)
                        { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }
                    }


                    using (DataSet dataSet = new DataSet())
                    {
                        dataSet.Tables.Add("Student");
                        dataSet.Tables["Student"].Columns.AddRange(
                            new DataColumn[] {
                            new DataColumn("Name", typeof(string)),
                            new DataColumn("Age", typeof(int))
                        }
                            );

                        this.tracer.WriteLine("创建表 Student(Name, Age) 到数据集");

                        dataSet.Tables["Student"].Rows.Add("小明", "11");
                        dataSet.Tables["Student"].Rows.Add("小哈", "13");
                        this.tracer.WriteLine("向表 Student 添加数据");

                        this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", dataSet.Tables["Student"].Rows[0].RowState));
                        this.tracer.WriteLine(string.Format("表 Student 第 2 条记录的状态为: {0}", dataSet.Tables["Student"].Rows[1].RowState));

                        DataRow row1 = dataSet.Tables["Student"].Rows[0];
                        DataRow row2 = dataSet.Tables["Student"].Rows[1];
                        row1.Delete();
                        this.tracer.WriteLine(string.Format("对第 1 条记录调用 Delete 方法后状态为 {0}", row1.RowState));
                        dataSet.Tables["Student"].Rows.Remove(row2);
                        this.tracer.WriteLine(string.Format("对第 2 条记录调用 Remove 方法后状态为 {0}", row2.RowState));
                    }
                }
                catch (Exception err)
                { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

                this.tracer.WaitPressEnter();
            }
            #endregion

            #region "是否测试使用 AcceptChanges, RejectChanges, SetAdded, SetModified 方法后 DataRow.RowState 的转化?"
            if (this.tracer.WaitInputAChar("是否测试使用 AcceptChanges, RejectChanges, SetAdded, SetModified 方法后 DataRow.RowState 的转化?") == 'y')
            {
                try
                {
                    using (DataSet dataSet = new DataSet())
                    {
                        /*
                         * Test.sdf 始终复制到 bin 目录下
                         * */
                        SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");

                        try
                        {
                            adapter.Fill(dataSet);
                            this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

                            DataRow row1 = dataSet.Tables[0].Rows[0];
                            DataRow row2 = dataSet.Tables[0].Rows[1];
                            DataRow row3 = dataSet.Tables[0].Rows[2];
                            DataRow row4 = dataSet.Tables[0].Rows[3];

                            this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", row1.RowState));
                            row1.AcceptChanges();
                            this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 AcceptChanges 方法后的状态为: {0}", row1.RowState));

                            row2["Age"] = 21;
                            this.tracer.WriteLine(string.Format("对表 Student 第 2 条记录修改后的状态为: {0}", row2.RowState));
                            row2.AcceptChanges();
                            this.tracer.WriteLine(string.Format("对表 Student 第 2 条记录调用 AcceptChanges 方法后的状态为: {0}", row2.RowState));

                            row3.SetAdded();
                            this.tracer.WriteLine(string.Format("对表 Student 第 3 条记录调用 SetAdded 方法后的状态为: {0}", row3.RowState));
                            row3.AcceptChanges();
                            this.tracer.WriteLine(string.Format("对表 Student 第 3 条记录调用 AcceptChanges 方法后的状态为: {0}", row3.RowState));

                            row4.Delete();
                            this.tracer.WriteLine(string.Format("对表 Student 第 4 条记录调用 Delete 方法后的状态为: {0}", row4.RowState));
                            row4.AcceptChanges();
                            this.tracer.WriteLine(string.Format("对表 Student 第 4 条记录调用 AcceptChanges 方法后的状态为: {0}", row4.RowState));

                            try
                            {
                                dataSet.Tables[0].Rows.Remove(row1);
                                this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 Remove 方法后的状态为: {0}", row1.RowState));
                                row1.AcceptChanges();
                                this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 AcceptChanges 方法后的状态为: {0}", row1.RowState));
                            }
                            catch (Exception err)
                            { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }
                        }
                        catch (Exception err)
                        { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }
                    }


                    using (DataSet dataSet = new DataSet())
                    {
                        /*
                         * Test.sdf 始终复制到 bin 目录下
                         * */
                        SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");

                        try
                        {
                            adapter.Fill(dataSet);
                            this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

                            DataRow row1 = dataSet.Tables[0].Rows[0];
                            DataRow row2 = dataSet.Tables[0].Rows[1];
                            DataRow row3 = dataSet.Tables[0].Rows[2];
                            DataRow row4 = dataSet.Tables[0].Rows[3];

                            this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", row1.RowState));
                            row1.RejectChanges();
                            this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 RejectChanges 方法后的状态为: {0}", row1.RowState));

                            row2["Age"] = 21;
                            this.tracer.WriteLine(string.Format("对表 Student 第 2 条记录修改后的状态为: {0}", row2.RowState));
                            row2.RejectChanges();
                            this.tracer.WriteLine(string.Format("对表 Student 第 2 条记录调用 RejectChanges 方法后的状态为: {0}", row2.RowState));

                            row3.SetAdded();
                            this.tracer.WriteLine(string.Format("对表 Student 第 3 条记录调用 SetAdded 方法后的状态为: {0}", row3.RowState));
                            row3.RejectChanges();
                            this.tracer.WriteLine(string.Format("对表 Student 第 3 条记录调用 RejectChanges 方法后的状态为: {0}", row3.RowState));

                            row4.Delete();
                            this.tracer.WriteLine(string.Format("对表 Student 第 4 条记录调用 Delete 方法后的状态为: {0}", row4.RowState));
                            row4.RejectChanges();
                            this.tracer.WriteLine(string.Format("对表 Student 第 4 条记录调用 RejectChanges 方法后的状态为: {0}", row4.RowState));

                            dataSet.Tables[0].Rows.Remove(row1);
                            this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 Remove 方法后的状态为: {0}", row1.RowState));
                            row1.RejectChanges();
                            this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 RejectChanges 方法后的状态为: {0}", row1.RowState));
                        }
                        catch (Exception err)
                        { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }
                    }


                    using (DataSet dataSet = new DataSet())
                    {
                        /*
                         * Test.sdf 始终复制到 bin 目录下
                         * */
                        SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");

                        try
                        {
                            adapter.Fill(dataSet);
                            this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

                            DataRow row1 = dataSet.Tables[0].Rows[0];
                            DataRow row2 = dataSet.Tables[0].Rows[1];
                            DataRow row3 = dataSet.Tables[0].Rows[2];
                            DataRow row4 = dataSet.Tables[0].Rows[3];

                            try
                            {
                                this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", row1.RowState));
                                row1.SetAdded();
                                this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 SetAdded 方法后的状态为: {0}", row1.RowState));
                            }
                            catch (Exception err)
                            { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

                            try
                            {
                                row2["Age"] = 21;
                                this.tracer.WriteLine(string.Format("对表 Student 第 2 条记录修改后的状态为: {0}", row2.RowState));
                                row2.SetAdded();
                                this.tracer.WriteLine(string.Format("对表 Student 第 2 条记录调用 SetAdded 方法后的状态为: {0}", row2.RowState));
                            }
                            catch (Exception err)
                            { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

                            try
                            {
                                row3.SetAdded();
                                this.tracer.WriteLine(string.Format("对表 Student 第 3 条记录调用 SetAdded 方法后的状态为: {0}", row3.RowState));
                                row3.SetAdded();
                                this.tracer.WriteLine(string.Format("对表 Student 第 3 条记录调用 SetAdded 方法后的状态为: {0}", row3.RowState));
                            }
                            catch (Exception err)
                            { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

                            try
                            {
                                row4.Delete();
                                this.tracer.WriteLine(string.Format("对表 Student 第 4 条记录调用 Delete 方法后的状态为: {0}", row4.RowState));
                                row4.SetAdded();
                                this.tracer.WriteLine(string.Format("对表 Student 第 4 条记录调用 SetAdded 方法后的状态为: {0}", row4.RowState));
                            }
                            catch (Exception err)
                            { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

                            try
                            {
                                dataSet.Tables[0].Rows.Remove(row1);
                                this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 Remove 方法后的状态为: {0}", row1.RowState));
                                row1.SetAdded();
                                this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 SetAdded 方法后的状态为: {0}", row1.RowState));
                            }
                            catch (Exception err)
                            { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }
                        }
                        catch (Exception err)
                        { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }
                    }


                    using (DataSet dataSet = new DataSet())
                    {
                        /*
                         * Test.sdf 始终复制到 bin 目录下
                         * */
                        SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");

                        try
                        {
                            adapter.Fill(dataSet);
                            this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

                            DataRow row1 = dataSet.Tables[0].Rows[0];
                            DataRow row2 = dataSet.Tables[0].Rows[1];
                            DataRow row3 = dataSet.Tables[0].Rows[2];
                            DataRow row4 = dataSet.Tables[0].Rows[3];

                            try
                            {
                                this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", row1.RowState));
                                row1.SetModified();
                                this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 SetModified 方法后的状态为: {0}", row1.RowState));
                            }
                            catch (Exception err)
                            { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

                            try
                            {
                                row2["Age"] = 21;
                                this.tracer.WriteLine(string.Format("对表 Student 第 2 条记录修改后的状态为: {0}", row2.RowState));
                                row2.SetModified();
                                this.tracer.WriteLine(string.Format("对表 Student 第 2 条记录调用 SetModified 方法后的状态为: {0}", row2.RowState));
                            }
                            catch (Exception err)
                            { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

                            try
                            {
                                row3.SetAdded();
                                this.tracer.WriteLine(string.Format("对表 Student 第 3 条记录调用 SetAdded 方法后的状态为: {0}", row3.RowState));
                                row3.SetModified();
                                this.tracer.WriteLine(string.Format("对表 Student 第 3 条记录调用 SetModified 方法后的状态为: {0}", row3.RowState));
                            }
                            catch (Exception err)
                            { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

                            try
                            {
                                row4.Delete();
                                this.tracer.WriteLine(string.Format("对表 Student 第 4 条记录调用 Delete 方法后的状态为: {0}", row4.RowState));
                                row4.SetModified();
                                this.tracer.WriteLine(string.Format("对表 Student 第 4 条记录调用 SetModified 方法后的状态为: {0}", row4.RowState));
                            }
                            catch (Exception err)
                            { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

                            try
                            {
                                dataSet.Tables[0].Rows.Remove(row1);
                                this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 Remove 方法后的状态为: {0}", row1.RowState));
                                row1.SetModified();
                                this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 SetModified 方法后的状态为: {0}", row1.RowState));
                            }
                            catch (Exception err)
                            { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }
                        }
                        catch (Exception err)
                        { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }
                    }
                }
                catch (Exception err)
                { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

                this.tracer.WaitPressEnter();
            }
            #endregion

            #region "是否测试使用 ImportRow, Copy 方法后 DataRow.RowState 的转化?"
            if (this.tracer.WaitInputAChar("是否测试使用 ImportRow, Copy 方法后 DataRow.RowState 的转化?") == 'y')
            {
                try
                {
                    using (DataSet dataSet = new DataSet())
                    {
                        dataSet.Tables.Add("Student");
                        dataSet.Tables["Student"].Columns.AddRange(
                            new DataColumn[] {
                            new DataColumn("Name", typeof(string)),
                            new DataColumn("Age", typeof(int))
                        }
                            );

                        this.tracer.WriteLine("创建表 Student(Name, Age) 到数据集 dataSet");

                        DataSet dataSet1 = dataSet.Clone();
                        this.tracer.WriteLine("克隆数据集 dataSet 到 dataSet1");

                        DataRow row1 = dataSet.Tables["Student"].Rows.Add("小明", 12);

                        DataRow row2 = dataSet.Tables["Student"].Rows.Add("小红", 10);
                        row2.AcceptChanges();

                        DataRow row3 = dataSet.Tables["Student"].Rows.Add("小刚", 15);
                        row3.AcceptChanges();
                        row3["Age"] = 14;

                        DataRow row4 = dataSet.Tables["Student"].Rows.Add("小芳", 18);
                        row4.AcceptChanges();
                        row4.Delete();

                        DataRow row5 = dataSet.Tables["Student"].NewRow();

                        this.tracer.WriteLine("为 dataSet 中的表 Student 添加数据");
                        this.tracer.WriteLine(string.Format("记录 row1 的状态为 {0}", row1.RowState));
                        this.tracer.WriteLine(string.Format("记录 row2 的状态为 {0}", row2.RowState));
                        this.tracer.WriteLine(string.Format("记录 row3 的状态为 {0}", row3.RowState));
                        this.tracer.WriteLine(string.Format("记录 row4 的状态为 {0}", row4.RowState));
                        this.tracer.WriteLine(string.Format("记录 row5 的状态为 {0}", row5.RowState));

                        dataSet1.Tables["Student"].ImportRow(row1);
                        dataSet1.Tables["Student"].ImportRow(row2);
                        dataSet1.Tables["Student"].ImportRow(row3);
                        dataSet1.Tables["Student"].ImportRow(row4);
                        dataSet1.Tables["Student"].ImportRow(row5);

                        this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 1 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[0].RowState));
                        this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 2 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[1].RowState));
                        this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 3 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[2].RowState));
                        this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 4 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[3].RowState));

                        try { this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 5 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[4].RowState)); }
                        catch (Exception err)
                        { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }
                    }

                    using (DataSet dataSet = new DataSet())
                    {
                        dataSet.Tables.Add("Student");
                        dataSet.Tables["Student"].Columns.AddRange(
                            new DataColumn[] {
                            new DataColumn("Name", typeof(string)),
                            new DataColumn("Age", typeof(int))
                        }
                            );

                        this.tracer.WriteLine("创建表 Student(Name, Age) 到数据集 dataSet");


                        DataRow row1 = dataSet.Tables["Student"].Rows.Add("小明", 12);

                        DataRow row2 = dataSet.Tables["Student"].Rows.Add("小红", 10);
                        row2.AcceptChanges();

                        DataRow row3 = dataSet.Tables["Student"].Rows.Add("小刚", 15);
                        row3.AcceptChanges();
                        row3["Age"] = 14;

                        DataRow row4 = dataSet.Tables["Student"].Rows.Add("小芳", 18);
                        row4.AcceptChanges();
                        row4.Delete();

                        DataRow row5 = dataSet.Tables["Student"].NewRow();

                        this.tracer.WriteLine("为 dataSet 中的表 Student 添加数据");
                        this.tracer.WriteLine(string.Format("记录 row1 的状态为 {0}", row1.RowState));
                        this.tracer.WriteLine(string.Format("记录 row2 的状态为 {0}", row2.RowState));
                        this.tracer.WriteLine(string.Format("记录 row3 的状态为 {0}", row3.RowState));
                        this.tracer.WriteLine(string.Format("记录 row4 的状态为 {0}", row4.RowState));
                        this.tracer.WriteLine(string.Format("记录 row5 的状态为 {0}", row5.RowState));

                        DataSet dataSet1 = dataSet.Copy();
                        this.tracer.WriteLine("复制数据集 dataSet 到 dataSet1");

                        this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 1 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[0].RowState));
                        this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 2 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[1].RowState));
                        this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 3 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[2].RowState));
                        this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 4 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[3].RowState));

                        try { this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 5 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[4].RowState)); }
                        catch (Exception err)
                        { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }
                    }
                }
                catch (Exception err)
                { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

                this.tracer.WaitPressEnter();
            }
            #endregion

            #region "是否测试访问不同 RowState 的 DataRow 中的数据?"
            if (this.tracer.WaitInputAChar("是否测试访问不同 RowState 的 DataRow 中的数据?") == 'y')
            {
                try
                {
                    using (DataSet dataSet = new DataSet())
                    {
                        /*
                         * Test.sdf 始终复制到 bin 目录下
                         * */
                        SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");

                        try
                        {
                            adapter.Fill(dataSet);
                            this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

                            DataRow row1 = dataSet.Tables[0].Rows[0];
                            DataRow row2 = dataSet.Tables[0].Rows[1];

                            this.tracer.WriteLine(string.Format("第 1 条记录, 姓名: {0}, 年龄: {1}", row1["Name"], row1["Age"]));

                            row1["Age"] = 50;
                            this.tracer.WriteLine(string.Format("修改并访问第 1 条记录当前数据, 姓名: {0}, 年龄: {1}", row1["Name"], row1["Age"]));

                            row1.Delete();
                            this.tracer.WriteLine(string.Format("对第 1 条记录调用 Delete 方法并访问, 姓名: {0}, 年龄: {1}", row1["Name", DataRowVersion.Original], row1["Age", DataRowVersion.Original]));


                            try
                            {
                                dataSet.Tables[0].Rows.Remove(row2);
                                this.tracer.WriteLine(string.Format("对第 2 条记录调用 Remove 方法并访问, 姓名: {0}, 年龄: {1}", row2["Name", DataRowVersion.Original], row2["Age", DataRowVersion.Original]));
                            }
                            catch (Exception err)
                            { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }
                        }
                        catch (Exception err)
                        { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }
                    }
                }
                catch (Exception err)
                { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

                this.tracer.WaitPressEnter();
            }
            #endregion

            #region "是否测试获取 DataTable 中不同 RowState 的 DataRow?"
            if (this.tracer.WaitInputAChar("是否测试获取 DataTable 中不同 RowState 的 DataRow?") == 'y')
            {
                try
                {
                    using (DataSet dataSet = new DataSet())
                    {
                        /*
                         * Test.sdf 始终复制到 bin 目录下
                         * */
                        SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");

                        try
                        {
                            adapter.Fill(dataSet);
                            this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

                            DataRow row4 = dataSet.Tables[0].Rows[3];

                            dataSet.Tables[0].Rows[0]["Age"] = 21;
                            this.tracer.WriteLine("修改第 1 条记录");

                            dataSet.Tables[0].Rows[1].Delete();
                            this.tracer.WriteLine("对第 2 条记录调用 Delete 方法");

                            dataSet.Tables[0].Rows.Remove(dataSet.Tables[0].Rows[2]);
                            this.tracer.WriteLine("移除第 3 条记录");

                            dataSet.Tables[0].Rows.Add("小新", 10);
                            this.tracer.WriteLine("添加新的记录");

                            this.tracer.WriteLine("使用 GetChanges 方法获取状态为 Added 的记录的副本");

                            foreach (DataRow row in dataSet.Tables[0].GetChanges(DataRowState.Added).Rows)
                            {
                                this.tracer.WriteLine(string.Format("\t姓名: {0}, 年龄: {1}, 行状态: {2}", row["Name"], row["Age"], row.RowState));
                            }

                            this.tracer.WriteLine("使用 GetChanges 方法获取状态为 Modified 的记录的副本");

                            foreach (DataRow row in dataSet.Tables[0].GetChanges(DataRowState.Modified).Rows)
                            {
                                this.tracer.WriteLine(string.Format("\t姓名: {0}, 年龄: {1}, 行状态: {2}", row["Name"], row["Age"], row.RowState));
                            }

                            this.tracer.WriteLine("使用 GetChanges 方法获取状态为 Unchanged 的记录的副本");

                            foreach (DataRow row in dataSet.Tables[0].GetChanges(DataRowState.Unchanged).Rows)
                            {
                                this.tracer.WriteLine(string.Format("\t姓名: {0}, 年龄: {1}, 行状态: {2}", row["Name"], row["Age"], row.RowState));

                                row["Age"] = 22;
                                this.tracer.WriteLine(string.Format("\t修改此副本记录为姓名: {0}, 年龄: {1}, 行状态: {2}", row["Name"], row["Age"], row.RowState));

                                this.tracer.WriteLine(string.Format("\t原始记录为姓名: {0}, 年龄: {1}, 行状态: {2}", row4["Name"], row4["Age"], row4.RowState));
                            }

                            this.tracer.WriteLine("使用 GetChanges 方法获取状态为 Deleted 的记录的副本");

                            foreach (DataRow row in dataSet.Tables[0].GetChanges(DataRowState.Deleted).Rows)
                            {
                                this.tracer.WriteLine(string.Format("\t姓名: {0}, 年龄: {1}, 行状态: {2}", row["Name", DataRowVersion.Original], row["Age", DataRowVersion.Original], row.RowState));
                            }

                            this.tracer.WriteLine("使用 GetChanges 方法获取状态为 Modified 和 Added 的记录的副本");

                            foreach (DataRow row in dataSet.Tables[0].GetChanges(DataRowState.Modified | DataRowState.Added).Rows)
                            {
                                this.tracer.WriteLine(string.Format("\t姓名: {0}, 年龄: {1}, 行状态: {2}", row["Name"], row["Age"], row.RowState));
                            }

                            try
                            {
                                this.tracer.WriteLine("使用 GetChanges 方法获取状态为 Detached 的记录的副本");

                                foreach (DataRow row in dataSet.Tables[0].GetChanges(DataRowState.Detached).Rows)
                                {
                                    this.tracer.WriteLine("发现一条状态为 Detached 的记录, 但无法访问");
                                }
                            }
                            catch (Exception err)
                            { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

                            this.tracer.WriteLine("使用没有参数的 GetChanges 方法获取记录的副本");

                            foreach (DataRow row in dataSet.Tables[0].GetChanges().Rows)
                            {
                                this.tracer.WriteLine(string.Format("\t行状态: {0}", row.RowState));
                            }

                            this.tracer.WriteLine("使用没有参数的 GetChanges 方法获取记录的副本");

                            foreach (DataRow row in dataSet.Tables[0].GetChanges().Rows)
                            {
                                this.tracer.WriteLine(string.Format("\t行状态: {0}", row.RowState));
                            }
                        }
                        catch (Exception err)
                        { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }
                    }
                }
                catch (Exception err)
                { this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

                this.tracer.WaitPressEnter();
            }
            #endregion
        }
예제 #9
0
 public void CambiaDeTabla(String Tabla, string comando)
 {
     try
     {
         da = new SqlCeDataAdapter("SELECT * FROM " + Tabla + " " + comando, PathBD);
         // Crear los comandos de insertar, actualizar y eliminar
         SqlCeCommandBuilder cb = new SqlCeCommandBuilder(da);
         // Asignar los comandos al DataAdapter
         // (se supone que lo hace automáticamente, pero...)
         da.UpdateCommand = cb.GetUpdateCommand();
         da.InsertCommand = cb.GetInsertCommand();
         da.DeleteCommand = cb.GetDeleteCommand();
         dt = new DataTable();
         // Llenar la tabla con lo s datos indicados
         da.Fill(dt);
         PathBD.Open();
     }
     catch (Exception w)
     {
         MessageBox.Show(w.ToString());
         return;
     }
 }
예제 #10
0
		public void TestRowState()
		{
			this.tracer.WriteLine("测试属性 RowState");

			#region "是否测试从不同位置载入 DataRow 后 RowState 的状态?"
			if (this.tracer.WaitInputAChar("是否测试从不同位置载入 DataRow 后 RowState 的状态?") == 'y')
			{

				try
				{

					using (DataSet dataSet = new DataSet())
					{
						File.WriteAllText(@"temp.xml", "<?xml version=\"1.0\" encoding=\"utf-8\" ?><TestDS xmlns=\"http://tempuri.org/TestDS.xsd\">" +
							"<Student>" +
							"<Name>小明</Name>" +
							"<Age>12</Age>" +
							"</Student>" +
							"</TestDS>");
						this.tracer.WriteLine("写入包含表 Student(Name, Age) 的 xml 到 temp.xml");

						try
						{
							dataSet.ReadXml(@"temp.xml");
							this.tracer.WriteLine("读取 temp.xml");

							foreach (DataTable table in dataSet.Tables)
							{
								this.tracer.WriteLine(string.Format("表 {0}", table.TableName));

								foreach (DataRow row in table.Rows)
									this.tracer.WriteLine(string.Format("状态: {0}", row.RowState));

							}

						}
						catch (Exception err)
						{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

					}


					using (DataSet dataSet = new DataSet())
					{
						dataSet.Tables.Add("Student");
						dataSet.Tables["Student"].Columns.AddRange(
							new DataColumn[] {
								new DataColumn("Name", typeof(string)),
								new DataColumn("Age", typeof(int))
							}
							);

						this.tracer.WriteLine("创建表 Student(Name, Age) 到数据集");

						dataSet.Tables["Student"].Rows.Add("小明", "11");
						this.tracer.WriteLine("向表 Student 添加数据");

						foreach (DataTable table in dataSet.Tables)
						{
							this.tracer.WriteLine(string.Format("表 {0}", table.TableName));

							foreach (DataRow row in table.Rows)
								this.tracer.WriteLine(string.Format("状态: {0}", row.RowState));

						}

					}


					using (DataSet dataSet = new DataSet())
					{
						/*
						 * Test.sdf 始终复制到 bin 目录下
						 * */
						SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");

						try
						{
							adapter.Fill(dataSet);
							this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

							foreach (DataTable table in dataSet.Tables)
							{
								this.tracer.WriteLine(string.Format("表 {0}", table.TableName));

								foreach (DataRow row in table.Rows)
									this.tracer.WriteLine(string.Format("状态: {0}", row.RowState));

							}

						}
						catch (Exception err)
						{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

					}


					using (DataSet dataSet = new DataSet())
					{
						/*
						 * Test.sdf 始终复制到 bin 目录下
						 * */
						SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");
						adapter.AcceptChangesDuringFill = false;

						this.tracer.WriteLine(string.Format("将 AcceptChangesDuringFill 属性设置为 false"));

						try
						{
							adapter.Fill(dataSet);
							this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

							foreach (DataTable table in dataSet.Tables)
							{
								this.tracer.WriteLine(string.Format("表 {0}", table.TableName));

								foreach (DataRow row in table.Rows)
									this.tracer.WriteLine(string.Format("状态: {0}", row.RowState));

							}

						}
						catch (Exception err)
						{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

					}

				}
				catch (Exception err)
				{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

				this.tracer.WaitPressEnter();
			}
			#endregion

			#region "是否测试修改, 更改, 删除后的 DataRow.RowState 转化?"
			if (this.tracer.WaitInputAChar("是否测试修改, 更改, 删除后的 DataRow.RowState 转化?") == 'y')
			{

				try
				{

					using (DataSet dataSet = new DataSet())
					{
						/*
						 * Test.sdf 始终复制到 bin 目录下
						 * */
						SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");

						try
						{
							adapter.Fill(dataSet);
							this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

							this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", dataSet.Tables[0].Rows[0].RowState));

							int age = Convert.ToInt32(dataSet.Tables[0].Rows[0]["Age"]);

							dataSet.Tables[0].Rows[0]["Age"] = 22;
							this.tracer.WriteLine(string.Format("修改表 Student 第 1 条记录的年龄后, 状态为: {0}", dataSet.Tables[0].Rows[0].RowState));

							dataSet.Tables[0].Rows[0]["Age"] = age;
							this.tracer.WriteLine(string.Format("修改表 Student 第 1 条记录的年龄为原值后, 状态为: {0}", dataSet.Tables[0].Rows[0].RowState));

							SqlCeCommandBuilder builder = new SqlCeCommandBuilder(adapter);
							adapter.UpdateCommand = builder.GetUpdateCommand();
							adapter.Update(dataSet);
							this.tracer.WriteLine("将数据集的修改更新到本地 Test.sdf 数据库");

							this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", dataSet.Tables[0].Rows[0].RowState));
						}
						catch (Exception err)
						{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

					}


					using (DataSet dataSet = new DataSet())
					{
						dataSet.Tables.Add("Student");
						dataSet.Tables["Student"].Columns.AddRange(
							new DataColumn[] {
								new DataColumn("Name", typeof(string)),
								new DataColumn("Age", typeof(int))
							}
							);

						this.tracer.WriteLine("创建表 Student(Name, Age) 到数据集");

						dataSet.Tables["Student"].Rows.Add("小明", "11");
						this.tracer.WriteLine("向表 Student 添加数据");

						this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", dataSet.Tables["Student"].Rows[0].RowState));

						dataSet.Tables["Student"].Rows[0]["Age"] = 22;
						this.tracer.WriteLine(string.Format("修改表 Student 第 1 条记录的年龄后, 状态为: {0}", dataSet.Tables["Student"].Rows[0].RowState));

						dataSet.Tables["Student"].Rows[0]["Name"] = "jack";
						this.tracer.WriteLine(string.Format("修改表 Student 第 1 条记录的姓名后, 状态为: {0}", dataSet.Tables["Student"].Rows[0].RowState));
					}


					using (DataSet dataSet = new DataSet())
					{
						/*
						 * Test.sdf 始终复制到 bin 目录下
						 * */
						SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");
						SqlCeCommandBuilder builder = new SqlCeCommandBuilder(adapter);
						adapter.DeleteCommand = builder.GetDeleteCommand();
						adapter.UpdateCommand = builder.GetUpdateCommand();
						adapter.InsertCommand = builder.GetInsertCommand();

						adapter.AcceptChangesDuringUpdate = false;

						this.tracer.WriteLine(string.Format("将 AcceptChangesDuringUpdate 属性设置为 false"));


						try
						{
							adapter.Fill(dataSet);
							this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

							DataRow newRow = dataSet.Tables[0].Rows.Add("小心心", 10);

							dataSet.Tables[0].Rows[0]["Age"] = 22;
							dataSet.Tables[0].Rows[1].Delete();
							this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", dataSet.Tables[0].Rows[0].RowState));
							this.tracer.WriteLine(string.Format("表 Student 第 2 条记录的状态为: {0}", dataSet.Tables[0].Rows[1].RowState));
							this.tracer.WriteLine(string.Format("表 Student 第 3 条记录的状态为: {0}", dataSet.Tables[0].Rows[2].RowState));
							this.tracer.WriteLine(string.Format("表 Student 新记录的状态为: {0}", newRow.RowState));

							adapter.Update(dataSet);
							this.tracer.WriteLine("将数据集更新到本地 Test.sdf 数据库");

							this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", dataSet.Tables[0].Rows[0].RowState));
							this.tracer.WriteLine(string.Format("表 Student 第 2 条记录的状态为: {0}", dataSet.Tables[0].Rows[1].RowState));
							this.tracer.WriteLine(string.Format("表 Student 第 3 条记录的状态为: {0}", dataSet.Tables[0].Rows[2].RowState));
							this.tracer.WriteLine(string.Format("表 Student 新记录的状态为: {0}", newRow.RowState));
						}
						catch (Exception err)
						{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

					}


					using (DataSet dataSet = new DataSet())
					{
						/*
						 * Test.sdf 始终复制到 bin 目录下
						 * */
						SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");

						try
						{
							adapter.Fill(dataSet);
							this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

							this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", dataSet.Tables[0].Rows[0].RowState));
							this.tracer.WriteLine(string.Format("表 Student 第 2 条记录的状态为: {0}", dataSet.Tables[0].Rows[1].RowState));

							DataRow row1 = dataSet.Tables[0].Rows[0];
							DataRow row2 = dataSet.Tables[0].Rows[1];
							row1.Delete();
							this.tracer.WriteLine(string.Format("对第 1 条记录调用 Delete 方法后状态为 {0}", row1.RowState));
							dataSet.Tables[0].Rows.Remove(row2);
							this.tracer.WriteLine(string.Format("对第 2 条记录调用 Remove 方法后状态为 {0}", row2.RowState));
						}
						catch (Exception err)
						{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

					}


					using (DataSet dataSet = new DataSet())
					{
						dataSet.Tables.Add("Student");
						dataSet.Tables["Student"].Columns.AddRange(
							new DataColumn[] {
								new DataColumn("Name", typeof(string)),
								new DataColumn("Age", typeof(int))
							}
							);

						this.tracer.WriteLine("创建表 Student(Name, Age) 到数据集");

						dataSet.Tables["Student"].Rows.Add("小明", "11");
						dataSet.Tables["Student"].Rows.Add("小哈", "13");
						this.tracer.WriteLine("向表 Student 添加数据");

						this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", dataSet.Tables["Student"].Rows[0].RowState));
						this.tracer.WriteLine(string.Format("表 Student 第 2 条记录的状态为: {0}", dataSet.Tables["Student"].Rows[1].RowState));

						DataRow row1 = dataSet.Tables["Student"].Rows[0];
						DataRow row2 = dataSet.Tables["Student"].Rows[1];
						row1.Delete();
						this.tracer.WriteLine(string.Format("对第 1 条记录调用 Delete 方法后状态为 {0}", row1.RowState));
						dataSet.Tables["Student"].Rows.Remove(row2);
						this.tracer.WriteLine(string.Format("对第 2 条记录调用 Remove 方法后状态为 {0}", row2.RowState));
					}


				}
				catch (Exception err)
				{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

				this.tracer.WaitPressEnter();
			}
			#endregion

			#region "是否测试使用 AcceptChanges, RejectChanges, SetAdded, SetModified 方法后 DataRow.RowState 的转化?"
			if (this.tracer.WaitInputAChar("是否测试使用 AcceptChanges, RejectChanges, SetAdded, SetModified 方法后 DataRow.RowState 的转化?") == 'y')
			{

				try
				{


					using (DataSet dataSet = new DataSet())
					{
						/*
						 * Test.sdf 始终复制到 bin 目录下
						 * */
						SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");

						try
						{
							adapter.Fill(dataSet);
							this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

							DataRow row1 = dataSet.Tables[0].Rows[0];
							DataRow row2 = dataSet.Tables[0].Rows[1];
							DataRow row3 = dataSet.Tables[0].Rows[2];
							DataRow row4 = dataSet.Tables[0].Rows[3];

							this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", row1.RowState));
							row1.AcceptChanges();
							this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 AcceptChanges 方法后的状态为: {0}", row1.RowState));

							row2["Age"] = 21;
							this.tracer.WriteLine(string.Format("对表 Student 第 2 条记录修改后的状态为: {0}", row2.RowState));
							row2.AcceptChanges();
							this.tracer.WriteLine(string.Format("对表 Student 第 2 条记录调用 AcceptChanges 方法后的状态为: {0}", row2.RowState));

							row3.SetAdded();
							this.tracer.WriteLine(string.Format("对表 Student 第 3 条记录调用 SetAdded 方法后的状态为: {0}", row3.RowState));
							row3.AcceptChanges();
							this.tracer.WriteLine(string.Format("对表 Student 第 3 条记录调用 AcceptChanges 方法后的状态为: {0}", row3.RowState));

							row4.Delete();
							this.tracer.WriteLine(string.Format("对表 Student 第 4 条记录调用 Delete 方法后的状态为: {0}", row4.RowState));
							row4.AcceptChanges();
							this.tracer.WriteLine(string.Format("对表 Student 第 4 条记录调用 AcceptChanges 方法后的状态为: {0}", row4.RowState));

							try
							{
								dataSet.Tables[0].Rows.Remove(row1);
								this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 Remove 方法后的状态为: {0}", row1.RowState));
								row1.AcceptChanges();
								this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 AcceptChanges 方法后的状态为: {0}", row1.RowState));
							}
							catch (Exception err)
							{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

						}
						catch (Exception err)
						{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

					}


					using (DataSet dataSet = new DataSet())
					{
						/*
						 * Test.sdf 始终复制到 bin 目录下
						 * */
						SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");

						try
						{
							adapter.Fill(dataSet);
							this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

							DataRow row1 = dataSet.Tables[0].Rows[0];
							DataRow row2 = dataSet.Tables[0].Rows[1];
							DataRow row3 = dataSet.Tables[0].Rows[2];
							DataRow row4 = dataSet.Tables[0].Rows[3];

							this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", row1.RowState));
							row1.RejectChanges();
							this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 RejectChanges 方法后的状态为: {0}", row1.RowState));

							row2["Age"] = 21;
							this.tracer.WriteLine(string.Format("对表 Student 第 2 条记录修改后的状态为: {0}", row2.RowState));
							row2.RejectChanges();
							this.tracer.WriteLine(string.Format("对表 Student 第 2 条记录调用 RejectChanges 方法后的状态为: {0}", row2.RowState));

							row3.SetAdded();
							this.tracer.WriteLine(string.Format("对表 Student 第 3 条记录调用 SetAdded 方法后的状态为: {0}", row3.RowState));
							row3.RejectChanges();
							this.tracer.WriteLine(string.Format("对表 Student 第 3 条记录调用 RejectChanges 方法后的状态为: {0}", row3.RowState));

							row4.Delete();
							this.tracer.WriteLine(string.Format("对表 Student 第 4 条记录调用 Delete 方法后的状态为: {0}", row4.RowState));
							row4.RejectChanges();
							this.tracer.WriteLine(string.Format("对表 Student 第 4 条记录调用 RejectChanges 方法后的状态为: {0}", row4.RowState));

							dataSet.Tables[0].Rows.Remove(row1);
							this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 Remove 方法后的状态为: {0}", row1.RowState));
							row1.RejectChanges();
							this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 RejectChanges 方法后的状态为: {0}", row1.RowState));
						}
						catch (Exception err)
						{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

					}


					using (DataSet dataSet = new DataSet())
					{
						/*
						 * Test.sdf 始终复制到 bin 目录下
						 * */
						SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");

						try
						{
							adapter.Fill(dataSet);
							this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

							DataRow row1 = dataSet.Tables[0].Rows[0];
							DataRow row2 = dataSet.Tables[0].Rows[1];
							DataRow row3 = dataSet.Tables[0].Rows[2];
							DataRow row4 = dataSet.Tables[0].Rows[3];

							try
							{
								this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", row1.RowState));
								row1.SetAdded();
								this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 SetAdded 方法后的状态为: {0}", row1.RowState));
							}
							catch (Exception err)
							{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

							try
							{
								row2["Age"] = 21;
								this.tracer.WriteLine(string.Format("对表 Student 第 2 条记录修改后的状态为: {0}", row2.RowState));
								row2.SetAdded();
								this.tracer.WriteLine(string.Format("对表 Student 第 2 条记录调用 SetAdded 方法后的状态为: {0}", row2.RowState));
							}
							catch (Exception err)
							{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

							try
							{
								row3.SetAdded();
								this.tracer.WriteLine(string.Format("对表 Student 第 3 条记录调用 SetAdded 方法后的状态为: {0}", row3.RowState));
								row3.SetAdded();
								this.tracer.WriteLine(string.Format("对表 Student 第 3 条记录调用 SetAdded 方法后的状态为: {0}", row3.RowState));
							}
							catch (Exception err)
							{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

							try
							{
								row4.Delete();
								this.tracer.WriteLine(string.Format("对表 Student 第 4 条记录调用 Delete 方法后的状态为: {0}", row4.RowState));
								row4.SetAdded();
								this.tracer.WriteLine(string.Format("对表 Student 第 4 条记录调用 SetAdded 方法后的状态为: {0}", row4.RowState));
							}
							catch (Exception err)
							{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

							try
							{
								dataSet.Tables[0].Rows.Remove(row1);
								this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 Remove 方法后的状态为: {0}", row1.RowState));
								row1.SetAdded();
								this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 SetAdded 方法后的状态为: {0}", row1.RowState));
							}
							catch (Exception err)
							{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

						}
						catch (Exception err)
						{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

					}


					using (DataSet dataSet = new DataSet())
					{
						/*
						 * Test.sdf 始终复制到 bin 目录下
						 * */
						SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");

						try
						{
							adapter.Fill(dataSet);
							this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

							DataRow row1 = dataSet.Tables[0].Rows[0];
							DataRow row2 = dataSet.Tables[0].Rows[1];
							DataRow row3 = dataSet.Tables[0].Rows[2];
							DataRow row4 = dataSet.Tables[0].Rows[3];

							try
							{
								this.tracer.WriteLine(string.Format("表 Student 第 1 条记录的状态为: {0}", row1.RowState));
								row1.SetModified();
								this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 SetModified 方法后的状态为: {0}", row1.RowState));
							}
							catch (Exception err)
							{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

							try
							{
								row2["Age"] = 21;
								this.tracer.WriteLine(string.Format("对表 Student 第 2 条记录修改后的状态为: {0}", row2.RowState));
								row2.SetModified();
								this.tracer.WriteLine(string.Format("对表 Student 第 2 条记录调用 SetModified 方法后的状态为: {0}", row2.RowState));
							}
							catch (Exception err)
							{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

							try
							{
								row3.SetAdded();
								this.tracer.WriteLine(string.Format("对表 Student 第 3 条记录调用 SetAdded 方法后的状态为: {0}", row3.RowState));
								row3.SetModified();
								this.tracer.WriteLine(string.Format("对表 Student 第 3 条记录调用 SetModified 方法后的状态为: {0}", row3.RowState));
							}
							catch (Exception err)
							{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

							try
							{
								row4.Delete();
								this.tracer.WriteLine(string.Format("对表 Student 第 4 条记录调用 Delete 方法后的状态为: {0}", row4.RowState));
								row4.SetModified();
								this.tracer.WriteLine(string.Format("对表 Student 第 4 条记录调用 SetModified 方法后的状态为: {0}", row4.RowState));
							}
							catch (Exception err)
							{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

							try
							{
								dataSet.Tables[0].Rows.Remove(row1);
								this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 Remove 方法后的状态为: {0}", row1.RowState));
								row1.SetModified();
								this.tracer.WriteLine(string.Format("对表 Student 第 1 条记录调用 SetModified 方法后的状态为: {0}", row1.RowState));
							}
							catch (Exception err)
							{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

						}
						catch (Exception err)
						{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

					}


				}
				catch (Exception err)
				{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

				this.tracer.WaitPressEnter();
			}
			#endregion

			#region "是否测试使用 ImportRow, Copy 方法后 DataRow.RowState 的转化?"
			if (this.tracer.WaitInputAChar("是否测试使用 ImportRow, Copy 方法后 DataRow.RowState 的转化?") == 'y')
			{

				try
				{

					using (DataSet dataSet = new DataSet())
					{
						dataSet.Tables.Add("Student");
						dataSet.Tables["Student"].Columns.AddRange(
							new DataColumn[] {
								new DataColumn("Name", typeof(string)),
								new DataColumn("Age", typeof(int))
							}
							);

						this.tracer.WriteLine("创建表 Student(Name, Age) 到数据集 dataSet");

						DataSet dataSet1 = dataSet.Clone();
						this.tracer.WriteLine("克隆数据集 dataSet 到 dataSet1");

						DataRow row1 = dataSet.Tables["Student"].Rows.Add("小明", 12);

						DataRow row2 = dataSet.Tables["Student"].Rows.Add("小红", 10);
						row2.AcceptChanges();

						DataRow row3 = dataSet.Tables["Student"].Rows.Add("小刚", 15);
						row3.AcceptChanges();
						row3["Age"] = 14;

						DataRow row4 = dataSet.Tables["Student"].Rows.Add("小芳", 18);
						row4.AcceptChanges();
						row4.Delete();

						DataRow row5 = dataSet.Tables["Student"].NewRow();

						this.tracer.WriteLine("为 dataSet 中的表 Student 添加数据");
						this.tracer.WriteLine(string.Format("记录 row1 的状态为 {0}", row1.RowState));
						this.tracer.WriteLine(string.Format("记录 row2 的状态为 {0}", row2.RowState));
						this.tracer.WriteLine(string.Format("记录 row3 的状态为 {0}", row3.RowState));
						this.tracer.WriteLine(string.Format("记录 row4 的状态为 {0}", row4.RowState));
						this.tracer.WriteLine(string.Format("记录 row5 的状态为 {0}", row5.RowState));

						dataSet1.Tables["Student"].ImportRow(row1);
						dataSet1.Tables["Student"].ImportRow(row2);
						dataSet1.Tables["Student"].ImportRow(row3);
						dataSet1.Tables["Student"].ImportRow(row4);
						dataSet1.Tables["Student"].ImportRow(row5);

						this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 1 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[0].RowState));
						this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 2 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[1].RowState));
						this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 3 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[2].RowState));
						this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 4 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[3].RowState));

						try { this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 5 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[4].RowState)); }
						catch (Exception err)
						{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

					}

					using (DataSet dataSet = new DataSet())
					{
						dataSet.Tables.Add("Student");
						dataSet.Tables["Student"].Columns.AddRange(
							new DataColumn[] {
								new DataColumn("Name", typeof(string)),
								new DataColumn("Age", typeof(int))
							}
							);

						this.tracer.WriteLine("创建表 Student(Name, Age) 到数据集 dataSet");


						DataRow row1 = dataSet.Tables["Student"].Rows.Add("小明", 12);

						DataRow row2 = dataSet.Tables["Student"].Rows.Add("小红", 10);
						row2.AcceptChanges();

						DataRow row3 = dataSet.Tables["Student"].Rows.Add("小刚", 15);
						row3.AcceptChanges();
						row3["Age"] = 14;

						DataRow row4 = dataSet.Tables["Student"].Rows.Add("小芳", 18);
						row4.AcceptChanges();
						row4.Delete();

						DataRow row5 = dataSet.Tables["Student"].NewRow();

						this.tracer.WriteLine("为 dataSet 中的表 Student 添加数据");
						this.tracer.WriteLine(string.Format("记录 row1 的状态为 {0}", row1.RowState));
						this.tracer.WriteLine(string.Format("记录 row2 的状态为 {0}", row2.RowState));
						this.tracer.WriteLine(string.Format("记录 row3 的状态为 {0}", row3.RowState));
						this.tracer.WriteLine(string.Format("记录 row4 的状态为 {0}", row4.RowState));
						this.tracer.WriteLine(string.Format("记录 row5 的状态为 {0}", row5.RowState));

						DataSet dataSet1 = dataSet.Copy();
						this.tracer.WriteLine("复制数据集 dataSet 到 dataSet1");

						this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 1 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[0].RowState));
						this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 2 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[1].RowState));
						this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 3 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[2].RowState));
						this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 4 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[3].RowState));

						try { this.tracer.WriteLine(string.Format("dataSet1 表 Student 第 5 条记录的状态为: {0}", dataSet1.Tables["Student"].Rows[4].RowState)); }
						catch (Exception err)
						{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

					}

				}
				catch (Exception err)
				{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

				this.tracer.WaitPressEnter();
			}
			#endregion

			#region "是否测试访问不同 RowState 的 DataRow 中的数据?"
			if (this.tracer.WaitInputAChar("是否测试访问不同 RowState 的 DataRow 中的数据?") == 'y')
			{

				try
				{

					using (DataSet dataSet = new DataSet())
					{
						/*
						 * Test.sdf 始终复制到 bin 目录下
						 * */
						SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");

						try
						{
							adapter.Fill(dataSet);
							this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

							DataRow row1 = dataSet.Tables[0].Rows[0];
							DataRow row2 = dataSet.Tables[0].Rows[1];

							this.tracer.WriteLine(string.Format("第 1 条记录, 姓名: {0}, 年龄: {1}", row1["Name"], row1["Age"]));

							row1["Age"] = 50;
							this.tracer.WriteLine(string.Format("修改并访问第 1 条记录当前数据, 姓名: {0}, 年龄: {1}", row1["Name"], row1["Age"]));

							row1.Delete();
							this.tracer.WriteLine(string.Format("对第 1 条记录调用 Delete 方法并访问, 姓名: {0}, 年龄: {1}", row1["Name", DataRowVersion.Original], row1["Age", DataRowVersion.Original]));


							try
							{
								dataSet.Tables[0].Rows.Remove(row2);
								this.tracer.WriteLine(string.Format("对第 2 条记录调用 Remove 方法并访问, 姓名: {0}, 年龄: {1}", row2["Name", DataRowVersion.Original], row2["Age", DataRowVersion.Original]));
							}
							catch (Exception err)
							{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

						}
						catch (Exception err)
						{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

					}

				}
				catch (Exception err)
				{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

				this.tracer.WaitPressEnter();
			}
			#endregion

			#region "是否测试获取 DataTable 中不同 RowState 的 DataRow?"
			if (this.tracer.WaitInputAChar("是否测试获取 DataTable 中不同 RowState 的 DataRow?") == 'y')
			{

				try
				{

					using (DataSet dataSet = new DataSet())
					{
						/*
						 * Test.sdf 始终复制到 bin 目录下
						 * */
						SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from Student", @"Data Source=|DataDirectory|\Test.sdf");

						try
						{
							adapter.Fill(dataSet);
							this.tracer.WriteLine("从本地 Test.sdf 数据库填充数据集");

							DataRow row4 = dataSet.Tables[0].Rows[3];

							dataSet.Tables[0].Rows[0]["Age"] = 21;
							this.tracer.WriteLine("修改第 1 条记录");

							dataSet.Tables[0].Rows[1].Delete();
							this.tracer.WriteLine("对第 2 条记录调用 Delete 方法");

							dataSet.Tables[0].Rows.Remove(dataSet.Tables[0].Rows[2]);
							this.tracer.WriteLine("移除第 3 条记录");

							dataSet.Tables[0].Rows.Add("小新", 10);
							this.tracer.WriteLine("添加新的记录");

							this.tracer.WriteLine("使用 GetChanges 方法获取状态为 Added 的记录的副本");

							foreach (DataRow row in dataSet.Tables[0].GetChanges(DataRowState.Added).Rows)
								this.tracer.WriteLine(string.Format("\t姓名: {0}, 年龄: {1}, 行状态: {2}", row["Name"], row["Age"], row.RowState));

							this.tracer.WriteLine("使用 GetChanges 方法获取状态为 Modified 的记录的副本");

							foreach (DataRow row in dataSet.Tables[0].GetChanges(DataRowState.Modified).Rows)
								this.tracer.WriteLine(string.Format("\t姓名: {0}, 年龄: {1}, 行状态: {2}", row["Name"], row["Age"], row.RowState));

							this.tracer.WriteLine("使用 GetChanges 方法获取状态为 Unchanged 的记录的副本");

							foreach (DataRow row in dataSet.Tables[0].GetChanges(DataRowState.Unchanged).Rows)
							{
								this.tracer.WriteLine(string.Format("\t姓名: {0}, 年龄: {1}, 行状态: {2}", row["Name"], row["Age"], row.RowState));

								row["Age"] = 22;
								this.tracer.WriteLine(string.Format("\t修改此副本记录为姓名: {0}, 年龄: {1}, 行状态: {2}", row["Name"], row["Age"], row.RowState));

								this.tracer.WriteLine(string.Format("\t原始记录为姓名: {0}, 年龄: {1}, 行状态: {2}", row4["Name"], row4["Age"], row4.RowState));
							}

							this.tracer.WriteLine("使用 GetChanges 方法获取状态为 Deleted 的记录的副本");

							foreach (DataRow row in dataSet.Tables[0].GetChanges(DataRowState.Deleted).Rows)
								this.tracer.WriteLine(string.Format("\t姓名: {0}, 年龄: {1}, 行状态: {2}", row["Name", DataRowVersion.Original], row["Age", DataRowVersion.Original], row.RowState));

							this.tracer.WriteLine("使用 GetChanges 方法获取状态为 Modified 和 Added 的记录的副本");

							foreach (DataRow row in dataSet.Tables[0].GetChanges(DataRowState.Modified | DataRowState.Added).Rows)
								this.tracer.WriteLine(string.Format("\t姓名: {0}, 年龄: {1}, 行状态: {2}", row["Name"], row["Age"], row.RowState));

							try
							{
								this.tracer.WriteLine("使用 GetChanges 方法获取状态为 Detached 的记录的副本");

								foreach (DataRow row in dataSet.Tables[0].GetChanges(DataRowState.Detached).Rows)
									this.tracer.WriteLine("发现一条状态为 Detached 的记录, 但无法访问");
							}
							catch (Exception err)
							{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

							this.tracer.WriteLine("使用没有参数的 GetChanges 方法获取记录的副本");

							foreach (DataRow row in dataSet.Tables[0].GetChanges().Rows)
								this.tracer.WriteLine(string.Format("\t行状态: {0}", row.RowState));

							this.tracer.WriteLine("使用没有参数的 GetChanges 方法获取记录的副本");

							foreach (DataRow row in dataSet.Tables[0].GetChanges().Rows)
								this.tracer.WriteLine(string.Format("\t行状态: {0}", row.RowState));

						}
						catch (Exception err)
						{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

					}

				}
				catch (Exception err)
				{ this.tracer.WriteLine(string.Format("异常: {0}", err.Message)); }

				this.tracer.WaitPressEnter();
			}
			#endregion

		}