数据导入导出所存在的问题?

上一篇文章我已经提到了用事务来处理数据的导入导出问题,但是还存在一些问题,那就是插入数据的过程中,插入的值如果有单引号就会出现问题,还有就是日期型的数据如果不加以转换也会出现问题,一旦出现问题,事务就不能再提交了,所以我在原有代码的基础上加以修正这些存在的问题,如果还有问题的话,希望路过此地的朋友能够批评指出,并给本人提点建议.
        string FLServerConnString = ConfigurationManager.ConnectionStrings       ["ImportData.Properties.Settings.FLServerConnectionString"].ConnectionString;
        string FLClientConnString = ConfigurationManager.ConnectionStrings["ImportData.Properties.Settings.FLClientConnectionString"].ConnectionString;        
        public DownloadDB()
        {
            InitializeComponent();

        }

        public bool ImportToClient(string tableName)
        {
            SqlConnection connServer = new SqlConnection(FLServerConnString);
            connServer.Open();
            SqlCommand cmdServer = new SqlCommand();
            cmdServer.Connection = connServer;
            cmdServer.CommandTimeout = 0;
            cmdServer.CommandText = "select * from " + tableName;
            SqlDataReader drServer = cmdServer.ExecuteReader();


            SqlConnection connClient = new SqlConnection(FLClientConnString);
            connClient.Open();
            SqlCommand cmdClient = new SqlCommand();
            SqlTransaction clientTran;
            clientTran = connClient.BeginTransaction();
            cmdClient.Connection = connClient;
            cmdClient.Transaction = clientTran;
            cmdClient.CommandTimeout = 0;
            cmdClient.CommandText = "delete from " + tableName;
            cmdClient.ExecuteNonQuery();

            try
            {
                string insertClientSql = "";
                object[] objectServerColumns = new object[drServer.FieldCount];

                while (drServer.Read())
                {
                    insertClientSql = "insert into " + tableName + " values(";
                    for (int i = 0; i < objectServerColumns.Length - 1; i++)
                    {
                        int j = drServer.GetValues(objectServerColumns);//此處一定不可缺少
                        string s = objectServerColumns[i].GetType().ToString();
                        if (objectServerColumns[i].GetType().ToString() == "System.DBNull")
                        {
                            insertClientSql += "null,";
                        }
                        else if (objectServerColumns[i].GetType().ToString() == "System.DateTime")
                        {
                            insertClientSql += "'"+Convert.ToDateTime(objectServerColumns[i]).ToShortDateString()+"',";
                        }
                        else
                        {
                            insertClientSql += "'" + objectServerColumns[i].ToString().Replace("'","''") +"',";
                        }
                    }
                    if (objectServerColumns[objectServerColumns.Length - 1].GetType().ToString() == "System.DBNull")
                    {
                        insertClientSql += "null)";
                    }
                    else if(objectServerColumns[objectServerColumns.Length-1].GetType().ToString()=="System.DateTime")
                    {
                        insertClientSql += "'"+Convert.ToDateTime(objectServerColumns[objectServerColumns.Length-1]).ToShortDateString()+"')";
                    }
                    else
                    {
                        insertClientSql += "'" + objectServerColumns[objectServerColumns.Length - 1].ToString().Replace("'","''") + "')";
                    }
                    cmdClient.CommandText = insertClientSql;
                    cmdClient.ExecuteNonQuery();
                }
                connServer.Close();//此處一定要關閉
                clientTran.Commit();
                drServer.Close();
                return true;
            }
            catch (Exception ee)
            {
                clientTran.Rollback();
                return false;
            }
            finally
            {
                connClient.Close();
            }
        }

        private void downDB_Click(object sender, EventArgs e)
        {
            string[] tableNames ={ "BM", "BZ","CSCP","XCLCZ"};
            int k;
            progressBar1.Maximum = tableNames.Length - 1;
            for (k = 0; k < tableNames.Length - 1; k++)
            {
                progressBar1.Value=k;
                if (ImportToClient(tableNames[k]) == false)
                {                   
                    MessageBox.Show("表" + tableNames[k] + "之後的數據復制失敗!");                   
                    break;            
                }
            }
            if (k == (tableNames.Length - 1))
            {
                if (ImportToClient(tableNames[k]))
                {
                    progressBar1.Value = tableNames.Length - 1;
                    MessageBox.Show("所有指定表數據都已成功復制!");
                }
                else
                    MessageBox.Show("最後一個表復制失敗!");
            }
           

        

posted @ 2007-05-31 20:33  穹苍之筝  阅读(300)  评论(0编辑  收藏  举报