From 3842934b01cd513fceaf4e0d6a533bfa35ebd26d Mon Sep 17 00:00:00 2001 From: "nelson.kai" Date: Thu, 15 Dec 2022 11:08:30 +0800 Subject: [PATCH] Update --- .vs/ExportDataToFile/v16/.suo | Bin 119296 -> 165376 bytes App.config | 21 +- ExportDataToFile.csproj | 10 + Form1.Designer.cs | 164 +++++----- Form1.cs | 560 +++++++++++++++++++++++++++++++--- packages.config | 1 + 6 files changed, 628 insertions(+), 128 deletions(-) diff --git a/.vs/ExportDataToFile/v16/.suo b/.vs/ExportDataToFile/v16/.suo index 64360e5e9aff6516f24b05c0ae1552ef76e533fe..fba774e8affe03e3a13d88198292a67c291b0469 100644 GIT binary patch literal 165376 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 RPyTDAiQ>tBCzJg5{{x?@XRiPN delta 7023 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 diff --git a/App.config b/App.config index 4362a87..4cb788c 100644 --- a/App.config +++ b/App.config @@ -1,13 +1,14 @@  - - - - + +
+ + + + - @@ -27,6 +28,16 @@ + + + + + + + + + + \ No newline at end of file diff --git a/ExportDataToFile.csproj b/ExportDataToFile.csproj index b79d09e..e0192e8 100644 --- a/ExportDataToFile.csproj +++ b/ExportDataToFile.csproj @@ -56,6 +56,9 @@ packages\Npgsql.7.0.0\lib\netstandard2.0\Npgsql.dll + + packages\Oracle.ManagedDataAccess.21.8.0\lib\net462\Oracle.ManagedDataAccess.dll + packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll @@ -126,6 +129,7 @@ ShowForm.cs + @@ -148,6 +152,12 @@ ShowForm.cs + + Designer + + + Designer + SettingsSingleFileGenerator diff --git a/Form1.Designer.cs b/Form1.Designer.cs index b8d32ac..fa9571e 100644 --- a/Form1.Designer.cs +++ b/Form1.Designer.cs @@ -55,6 +55,14 @@ namespace ExportDataToFile this.txtSourcePWD = new System.Windows.Forms.TextBox(); this.label5 = new System.Windows.Forms.Label(); this.dgvExportList = new System.Windows.Forms.DataGridView(); + this.clExport = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.clCancel = new System.Windows.Forms.DataGridViewButtonColumn(); + this.clShow = new System.Windows.Forms.DataGridViewButtonColumn(); + this.clSourceTable = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.clTargetTable = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.clTableDel = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.clWhere = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.clMappingData = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.label11 = new System.Windows.Forms.Label(); this.dgvColumnMapping = new System.Windows.Forms.DataGridView(); this.clExpColumn = new System.Windows.Forms.DataGridViewCheckBoxColumn(); @@ -78,14 +86,6 @@ namespace ExportDataToFile this.btnImportXML = new System.Windows.Forms.Button(); this.ofPath = new System.Windows.Forms.OpenFileDialog(); this.btnClean = new System.Windows.Forms.Button(); - this.clExport = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.clCancel = new System.Windows.Forms.DataGridViewButtonColumn(); - this.clShow = new System.Windows.Forms.DataGridViewButtonColumn(); - this.clSourceTable = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.clTargetTable = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.clTableDel = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.clWhere = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.clMappingData = new System.Windows.Forms.DataGridViewTextBoxColumn(); ((System.ComponentModel.ISupportInitialize)(this.dgvExportList)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dgvColumnMapping)).BeginInit(); this.SuspendLayout(); @@ -97,6 +97,7 @@ namespace ExportDataToFile this.txtTargetID.Name = "txtTargetID"; this.txtTargetID.Size = new System.Drawing.Size(135, 29); this.txtTargetID.TabIndex = 11; + this.txtTargetID.Text = "origtek"; // // label7 // @@ -115,6 +116,7 @@ namespace ExportDataToFile this.txtTargetDBName.Name = "txtTargetDBName"; this.txtTargetDBName.Size = new System.Drawing.Size(135, 29); this.txtTargetDBName.TabIndex = 10; + this.txtTargetDBName.Text = "origtekpdb"; // // label8 // @@ -133,6 +135,7 @@ namespace ExportDataToFile this.txtTargetIP.Name = "txtTargetIP"; this.txtTargetIP.Size = new System.Drawing.Size(135, 29); this.txtTargetIP.TabIndex = 8; + this.txtTargetIP.Text = "192.168.1.76"; // // label9 // @@ -177,6 +180,7 @@ namespace ExportDataToFile this.txtSourceID.Name = "txtSourceID"; this.txtSourceID.Size = new System.Drawing.Size(135, 29); this.txtSourceID.TabIndex = 5; + this.txtSourceID.Text = "origtek"; // // label4 // @@ -195,6 +199,7 @@ namespace ExportDataToFile this.txtSourceDBName.Name = "txtSourceDBName"; this.txtSourceDBName.Size = new System.Drawing.Size(135, 29); this.txtSourceDBName.TabIndex = 4; + this.txtSourceDBName.Text = "origtekpdb"; // // label3 // @@ -213,6 +218,7 @@ namespace ExportDataToFile this.txtSourceIP.Name = "txtSourceIP"; this.txtSourceIP.Size = new System.Drawing.Size(135, 29); this.txtSourceIP.TabIndex = 2; + this.txtSourceIP.Text = "192.168.1.76"; // // label2 // @@ -292,6 +298,7 @@ namespace ExportDataToFile this.txtTargetPWD.PasswordChar = '*'; this.txtTargetPWD.Size = new System.Drawing.Size(135, 29); this.txtTargetPWD.TabIndex = 12; + this.txtTargetPWD.Text = "!QAZ2wsx"; // // label6 // @@ -322,6 +329,7 @@ namespace ExportDataToFile this.txtSourcePWD.PasswordChar = '*'; this.txtSourcePWD.Size = new System.Drawing.Size(135, 29); this.txtSourcePWD.TabIndex = 6; + this.txtSourcePWD.Text = "!QAZ2wsx"; // // label5 // @@ -359,6 +367,76 @@ namespace ExportDataToFile this.dgvExportList.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvExportList_CellClick); this.dgvExportList.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dgvExportList_CellContentClick); // + // clExport + // + this.clExport.FalseValue = "false"; + this.clExport.Frozen = true; + this.clExport.HeaderText = "匯出"; + this.clExport.IndeterminateValue = "false"; + this.clExport.Name = "clExport"; + this.clExport.ReadOnly = true; + this.clExport.TrueValue = "true"; + this.clExport.Width = 55; + // + // clCancel + // + this.clCancel.Frozen = true; + this.clCancel.HeaderText = "清除"; + this.clCancel.Name = "clCancel"; + this.clCancel.Text = "..."; + this.clCancel.Width = 55; + // + // clShow + // + this.clShow.Frozen = true; + this.clShow.HeaderText = "顯示來源"; + this.clShow.Name = "clShow"; + this.clShow.Text = "..."; + this.clShow.Width = 80; + // + // clSourceTable + // + this.clSourceTable.DataPropertyName = "TableName"; + this.clSourceTable.Frozen = true; + this.clSourceTable.HeaderText = "來源資料表名稱"; + this.clSourceTable.Name = "clSourceTable"; + this.clSourceTable.ReadOnly = true; + this.clSourceTable.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.clSourceTable.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.clSourceTable.Width = 300; + // + // clTargetTable + // + this.clTargetTable.Frozen = true; + this.clTargetTable.HeaderText = "目標資料表名稱"; + this.clTargetTable.Name = "clTargetTable"; + this.clTargetTable.ReadOnly = true; + this.clTargetTable.Resizable = System.Windows.Forms.DataGridViewTriState.True; + this.clTargetTable.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; + this.clTargetTable.Width = 300; + // + // clTableDel + // + this.clTableDel.Frozen = true; + this.clTableDel.HeaderText = "清除目標資料表內容"; + this.clTableDel.Name = "clTableDel"; + this.clTableDel.Width = 180; + // + // clWhere + // + this.clWhere.Frozen = true; + this.clWhere.HeaderText = "過濾條件"; + this.clWhere.Name = "clWhere"; + this.clWhere.Visible = false; + this.clWhere.Width = 200; + // + // clMappingData + // + this.clMappingData.Frozen = true; + this.clMappingData.HeaderText = "欄位對應"; + this.clMappingData.Name = "clMappingData"; + this.clMappingData.Visible = false; + // // label11 // this.label11.AutoSize = true; @@ -581,76 +659,6 @@ namespace ExportDataToFile this.btnClean.UseVisualStyleBackColor = true; this.btnClean.Click += new System.EventHandler(this.btnClean_Click); // - // clExport - // - this.clExport.FalseValue = "false"; - this.clExport.Frozen = true; - this.clExport.HeaderText = "匯出"; - this.clExport.IndeterminateValue = "false"; - this.clExport.Name = "clExport"; - this.clExport.ReadOnly = true; - this.clExport.TrueValue = "true"; - this.clExport.Width = 55; - // - // clCancel - // - this.clCancel.Frozen = true; - this.clCancel.HeaderText = "清除"; - this.clCancel.Name = "clCancel"; - this.clCancel.Text = "..."; - this.clCancel.Width = 55; - // - // clShow - // - this.clShow.Frozen = true; - this.clShow.HeaderText = "顯示來源"; - this.clShow.Name = "clShow"; - this.clShow.Text = "..."; - this.clShow.Width = 80; - // - // clSourceTable - // - this.clSourceTable.DataPropertyName = "TableName"; - this.clSourceTable.Frozen = true; - this.clSourceTable.HeaderText = "來源資料表名稱"; - this.clSourceTable.Name = "clSourceTable"; - this.clSourceTable.ReadOnly = true; - this.clSourceTable.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.clSourceTable.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - this.clSourceTable.Width = 300; - // - // clTargetTable - // - this.clTargetTable.Frozen = true; - this.clTargetTable.HeaderText = "目標資料表名稱"; - this.clTargetTable.Name = "clTargetTable"; - this.clTargetTable.ReadOnly = true; - this.clTargetTable.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.clTargetTable.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - this.clTargetTable.Width = 300; - // - // clTableDel - // - this.clTableDel.Frozen = true; - this.clTableDel.HeaderText = "清除目標資料表內容"; - this.clTableDel.Name = "clTableDel"; - this.clTableDel.Width = 180; - // - // clWhere - // - this.clWhere.Frozen = true; - this.clWhere.HeaderText = "過濾條件"; - this.clWhere.Name = "clWhere"; - this.clWhere.Visible = false; - this.clWhere.Width = 200; - // - // clMappingData - // - this.clMappingData.Frozen = true; - this.clMappingData.HeaderText = "欄位對應"; - this.clMappingData.Name = "clMappingData"; - this.clMappingData.Visible = false; - // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 20F); diff --git a/Form1.cs b/Form1.cs index 67e6df6..d36fa68 100644 --- a/Form1.cs +++ b/Form1.cs @@ -12,6 +12,7 @@ using System.Threading.Tasks; using System.Windows.Forms; using Npgsql; using MySqlConnector; +using Oracle.ManagedDataAccess.Client; using ManagementSystem.Utility; namespace ExportDataToFile @@ -26,14 +27,17 @@ namespace ExportDataToFile string strTargetClass = ""; //MS-SQL - SqlConnection sqlMSSourceConn = new SqlConnection(); - SqlConnection sqlMSTargetConn = new SqlConnection(); + SqlConnection sqlMSSourceConn = null; //new SqlConnection(); + SqlConnection sqlMSTargetConn = null; //new SqlConnection(); //PostgreSQL - NpgsqlConnection sqlPsgSourceConn = new NpgsqlConnection(); - NpgsqlConnection sqlPsgTargetConn = new NpgsqlConnection(); + NpgsqlConnection sqlPsgSourceConn = null; //new NpgsqlConnection(); + NpgsqlConnection sqlPsgTargetConn = null; //new NpgsqlConnection(); //MySQL - MySqlConnection sqlMySourceConn = new MySqlConnection(); - MySqlConnection sqlMyTargetConn = new MySqlConnection(); + MySqlConnection sqlMySourceConn = null; //new MySqlConnection(); + MySqlConnection sqlMyTargetConn = null; //new MySqlConnection(); + //Oracle + OracleConnection sqlOraSourceConn = null; //new OracleConnection(); + OracleConnection sqlOraTargetConn = null; //new OracleConnection(); public Form1() { @@ -67,6 +71,10 @@ namespace ExportDataToFile switch (cbSourceClass.SelectedItem.ToString().Trim()) { case "MS-SQL": + //MS-SQL + sqlMSSourceConn = new SqlConnection(); + sqlMSTargetConn = new SqlConnection(); + sqlMSSourceConn = MSSQLUtility.GetConn(strIP, strDBName, strID, strPWD, strPort); if (sqlMSSourceConn == null) { @@ -76,7 +84,11 @@ namespace ExportDataToFile strSourceClass = "MS-SQL"; Application.DoEvents(); break; - case "MySQL": + case "MySQL": + //MySQL + sqlMySourceConn = new MySqlConnection(); + sqlMyTargetConn = new MySqlConnection(); + sqlMySourceConn = MySQLUtility.GetConn(strIP, strDBName, strID, strPWD, strPort); if (sqlMySourceConn == null) { @@ -88,10 +100,25 @@ namespace ExportDataToFile Application.DoEvents(); break; case "Oracle": + //Oracle + sqlOraSourceConn = new OracleConnection(); + sqlOraTargetConn = new OracleConnection(); + + sqlOraSourceConn = OracleUtility.GetConn(strIP, strDBName, strID, strPWD, strPort); + if (sqlOraSourceConn == null) + { + MessageBox.Show("連線失敗,請查詢連線資訊"); + } + dtResult = ShowOracleTableList(sqlOraSourceConn, strDBName); + strSourceClass = "Oracle"; Application.DoEvents(); break; case "PostgreSQL": + //PostgreSQL + sqlPsgSourceConn = new NpgsqlConnection(); + sqlPsgTargetConn = new NpgsqlConnection(); + sqlPsgSourceConn = PostgreSQLUtility.GetConn(strIP, strDBName, strID, strPWD, strPort); if (sqlPsgSourceConn == null) { @@ -157,7 +184,9 @@ namespace ExportDataToFile Application.DoEvents(); break; case "Oracle": - strTargetClass = "Oracle"; + sqlOraTargetConn = OracleUtility.GetConn(strIP, strDBName, strID, strPWD, strPort); + dtResult = ShowOracleTableList(sqlOraTargetConn, strDBName); + strTargetClass = "Oracle"; Application.DoEvents(); break; case "PostgreSQL": @@ -167,7 +196,6 @@ namespace ExportDataToFile break; } - //cbTargetTable.ValueMember = "name"; cbTargetTable.DataSource = dtResult; cbTargetTable.SelectedIndex = -1; blTargetConnStatus = true; @@ -177,6 +205,7 @@ namespace ExportDataToFile else { UnLockTargetForm(); + Form1_FormClosing(null,null); } } else @@ -253,7 +282,8 @@ namespace ExportDataToFile this.clTargetColumn.DisplayMember = "Field"; break; case "Oracle": - + dtResult = ShowOracleColumnList(sqlOraTargetConn, cbTargetTable.SelectedValue.ToString()); + this.clTargetColumn.DisplayMember = "COLUMN_NAME"; break; case "PostgreSQL": dtResult = ShowPostgreSQLColumnList(sqlPsgTargetConn, cbTargetTable.SelectedValue.ToString()); @@ -314,7 +344,7 @@ namespace ExportDataToFile ExportToMySQLData(sfPath.FileName, sfPath.DefaultExt); break; case "Oracle": - + ExportToOracleData(sfPath.FileName, sfPath.DefaultExt); break; case "PostgreSQL": ExportToPostgreSQLData(sfPath.FileName, sfPath.DefaultExt); @@ -332,20 +362,25 @@ namespace ExportDataToFile private void Form1_FormClosing(object sender, FormClosingEventArgs e) { //MS-SQL - sqlMSSourceConn.Close(); + //sqlMSSourceConn.Close(); sqlMSSourceConn = null; - sqlMSTargetConn.Close(); + //sqlMSTargetConn.Close(); sqlMSTargetConn = null; //PostgreSQL - sqlPsgSourceConn.Close(); + //sqlPsgSourceConn.Close(); sqlPsgSourceConn = null; - sqlPsgTargetConn.Close(); + //sqlPsgTargetConn.Close(); sqlPsgTargetConn = null; //MySQL - sqlMySourceConn.Close(); + //sqlMySourceConn.Close(); sqlMySourceConn = null; - sqlMyTargetConn.Close(); + //sqlMyTargetConn.Close(); sqlMyTargetConn = null; + //Oracle + //sqlOraSourceConn.Close(); + sqlOraSourceConn = null; + //sqlOraTargetConn.Close(); + sqlOraTargetConn = null; } private void btnMapping_Click(object sender, EventArgs e) @@ -566,16 +601,24 @@ namespace ExportDataToFile cbTargetTable.SelectedIndex = -1; cbTargetTable.Enabled = false; - //dgvExportList.DataSource = null; - //dgvExportList.Refresh(); - //dgvColumnMapping.DataSource = null; - //dgvColumnMapping.Refresh(); - sqlMSSourceConn.Close(); - sqlMSTargetConn.Close(); - sqlPsgSourceConn.Close(); - sqlPsgTargetConn.Close(); - sqlMySourceConn.Close(); - sqlMyTargetConn.Close(); + //sqlMSSourceConn.Close(); + //sqlMSTargetConn.Close(); + //sqlPsgSourceConn.Close(); + //sqlPsgTargetConn.Close(); + //sqlMySourceConn.Close(); + //sqlMyTargetConn.Close(); + //sqlOraSourceConn.Close(); + //sqlOraTargetConn.Close(); + + sqlMSSourceConn = null; + sqlMSTargetConn = null; + sqlPsgSourceConn = null; + sqlPsgTargetConn = null; + sqlMySourceConn = null; + sqlMyTargetConn = null; + sqlOraSourceConn = null; + sqlOraTargetConn = null; + btnImportXML.Enabled = true; btnExportXML.Enabled = false; btnExport.Enabled = false; @@ -745,6 +788,7 @@ namespace ExportDataToFile dtResult = GetMySQLResult(strSelectCommand, sqlMySourceConn).Tables["Result"]; break; case "Oracle": + dtResult = GetOracleResult(strSelectCommand, sqlOraSourceConn).Tables["Result"]; break; case "PostgreSQL": dtResult = GetPostgreSQLResult(strSelectCommand.ToString(), sqlPsgSourceConn).Tables["Result"]; @@ -768,7 +812,6 @@ namespace ExportDataToFile { //無設定最大筆數 Utility.WriteFile(strPath + ".sql", string.Format("/*======================================================={0}======================================================*/", strTargetTable)); - Utility.WriteFile(strPath + ".sql", string.Format("raiserror('Now Insert {0} Datas .... ', 1, 1)", strTargetTable)); Utility.WriteFile(strPath + ".sql", "Go"); Utility.WriteFile(strPath + ".sql", " "); } @@ -779,7 +822,6 @@ namespace ExportDataToFile strFileCount = ""; Utility.WriteFile(strPath + strFileCount + ".sql", string.Format("/*======================================================={0}======================================================*/", strTargetTable)); - Utility.WriteFile(strPath + strFileCount + ".sql", string.Format("raiserror('Now Insert {0} Datas .... ', 1, 1)", strTargetTable)); Utility.WriteFile(strPath + strFileCount + ".sql", "Go"); Utility.WriteFile(strPath + strFileCount + ".sql", " "); } @@ -822,11 +864,28 @@ namespace ExportDataToFile { if (strValues == "") { - strValues = ConvertMSSQLDataType(dr[dc].ToString().Trim(), dc.DataType.ToString()); + switch (dc.DataType.ToString().ToUpper()) + { + case "SYSTEM.DATETIME": + strValues = ConvertMSSQLDataType(DateTime.Parse(dr[dc].ToString()), dc.DataType.ToString()); + break; + default: + strValues = ConvertMSSQLDataType(dr[dc].ToString().Trim(), dc.DataType.ToString()); + break; + } } else { - strValues += "," + ConvertMSSQLDataType(dr[dc].ToString().Trim(), dc.DataType.ToString()); + switch (dc.DataType.ToString().ToUpper()) + { + case "SYSTEM.DATETIME": + strValues += "," + ConvertMSSQLDataType(DateTime.Parse(dr[dc].ToString()), dc.DataType.ToString()); + break; + default: + strValues += "," + ConvertMSSQLDataType(dr[dc].ToString().Trim(), dc.DataType.ToString()); + break; + } + } } @@ -895,6 +954,7 @@ namespace ExportDataToFile return "[" + strSourceCol + "] AS " + strTargetCol; case "DATETIME": return "Convert(varchar,[" + strSourceCol + "],21) AS " + strTargetCol; + //return "[" + strSourceCol + "] AS " + strTargetCol; default: return "[" + strSourceCol + "] AS " + strTargetCol; } @@ -918,6 +978,11 @@ namespace ExportDataToFile return "'" + strData.ToString().Trim() + "'"; } } + + private string ConvertMSSQLDataType(DateTime dtData, string strType) + { + return "'" + dtData.ToString("yyyy-MM-dd HH:mm:ss") + "'"; + } #endregion //End of MS-SQL #region PostgreSQL @@ -1057,6 +1122,7 @@ namespace ExportDataToFile dtResult = GetMySQLResult(strSelectCommand, sqlMySourceConn).Tables["Result"]; break; case "Oracle": + dtResult = GetOracleResult(strSelectCommand, sqlOraSourceConn).Tables["Result"]; break; case "PostgreSQL": dtResult = GetPostgreSQLResult(strSelectCommand.ToString(), sqlPsgSourceConn).Tables["Result"]; @@ -1081,7 +1147,6 @@ namespace ExportDataToFile { //無設定最大筆數 Utility.WriteFile(strPath + ".sql", string.Format("/*======================================================={0}======================================================*/", strTargetTable)); - Utility.WriteFile(strPath + ".sql", string.Format("raiserror('Now Insert {0} Datas .... ', 1, 1)", strTargetTable)); Utility.WriteFile(strPath + ".sql", "Go"); Utility.WriteFile(strPath + ".sql", " "); } @@ -1092,7 +1157,6 @@ namespace ExportDataToFile strFileCount = ""; Utility.WriteFile(strPath + strFileCount + ".sql", string.Format("/*======================================================={0}======================================================*/", strTargetTable)); - Utility.WriteFile(strPath + strFileCount + ".sql", string.Format("raiserror('Now Insert {0} Datas .... ', 1, 1)", strTargetTable)); Utility.WriteFile(strPath + strFileCount + ".sql", " "); } } @@ -1132,11 +1196,34 @@ namespace ExportDataToFile { if (strValues == "") { - strValues = ConvertMSSQLDataType(dr[dc].ToString().Trim(), dc.DataType.ToString()); + switch (dc.DataType.ToString().ToUpper()) + { + case "TIMESTAMP WITH TIME ZONE": + strValues = ConvertMSSQLDataType(DateTime.Parse(dr[dc].ToString()), dc.DataType.ToString()); + break; + case "TIMESTAMP WITHOUT TIME ZONE": + strValues = ConvertMSSQLDataType(DateTime.Parse(dr[dc].ToString()), dc.DataType.ToString()); + break; + default: + strValues = ConvertMSSQLDataType(dr[dc].ToString().Trim(), dc.DataType.ToString()); + break; + } } else { - strValues += "," + ConvertMSSQLDataType(dr[dc].ToString().Trim(), dc.DataType.ToString()); + switch (dc.DataType.ToString().ToUpper()) + { + case "TIMESTAMP WITH TIME ZONE": + strValues += "," + ConvertMSSQLDataType(DateTime.Parse(dr[dc].ToString()), dc.DataType.ToString()); + break; + case "TIMESTAMP WITHOUT TIME ZONE": + strValues += "," + ConvertMSSQLDataType(DateTime.Parse(dr[dc].ToString()), dc.DataType.ToString()); + break; + default: + strValues += "," + ConvertMSSQLDataType(dr[dc].ToString().Trim(), dc.DataType.ToString()); + break; + } + } } @@ -1193,10 +1280,10 @@ namespace ExportDataToFile return strSourceCol + " AS " + strTargetCol; case "INTEGER": return strSourceCol + " AS " + strTargetCol; - case "TIMESTAMP WITH TIME ZONE": - return "to_char(" + strSourceCol + ", 'yyyy-MM-dd hh24:mm:ss')"; - case "TIMESTAMP WITHOUT TIME ZONE": - return "to_char(" + strSourceCol + ", 'yyyy-MM-dd hh24:mm:ss')"; + //case "TIMESTAMP WITH TIME ZONE": + // return "to_char(" + strSourceCol + ", 'yyyy-MM-dd hh24:mm:ss')"; + //case "TIMESTAMP WITHOUT TIME ZONE": + // return "to_char(" + strSourceCol + ", 'yyyy-MM-dd hh24:mm:ss')"; default: return strSourceCol + " AS " + strTargetCol; @@ -1215,8 +1302,8 @@ namespace ExportDataToFile return "'" + strData.ToString().Replace("'","''").Trim() + "'"; case "SYSTEM.INT32": return strData.ToString().Trim(); - case "SYSTEM.DATETIME": - return "'" + strData.ToString().Trim() + "'"; + //case "SYSTEM.DATETIME": + //return "'" + strData.ToString().Trim() + "'"; case "SYSTEM.BOOLEAN": return strData.ToString().Trim(); default: @@ -1224,6 +1311,11 @@ namespace ExportDataToFile } } + private string ConvertPostgreSQLDataType(DateTime dtData, string strType) + { + return "'" + dtData.ToString("yyyy-MM-dd HH:mm:ss") + "'"; + } + #endregion //End of PostgreSQL #region MySQL @@ -1390,6 +1482,7 @@ namespace ExportDataToFile dtResult = GetMySQLResult(strSelectCommand, sqlMySourceConn).Tables["Result"]; break; case "Oracle": + dtResult = GetOracleResult(strSelectCommand, sqlOraSourceConn).Tables["Result"]; break; case "PostgreSQL": dtResult = GetPostgreSQLResult(strSelectCommand.ToString(), sqlPsgSourceConn).Tables["Result"]; @@ -1575,6 +1668,356 @@ namespace ExportDataToFile } #endregion //End of MySQL + #region Oracle + public DataSet GetOracleResult(string strSQL, OracleConnection conn) + { + DataSet dsData = new DataSet(); + try + { + using (OracleDataAdapter sqlAdapter = new OracleDataAdapter(strSQL, conn)) + { + if (conn.State == ConnectionState.Closed) //判斷連線狀態 + { + conn.Open(); + blSourceConnStatus = true; + } + sqlAdapter.Fill(dsData, "Result"); + } + + return dsData; + } + catch (Exception ex) + { + throw ex; + } + } + + private DataTable ShowOracleTableList(OracleConnection sqlConn , string strDBName) + { + try + { + string strGetOracleTableList = "SELECT TABLE_NAME AS TableName FROM ALL_TABLES Where OWNER Not IN ('SYS', 'XDB', 'SYSTEM', 'CTXSYS', 'MDSYS') "; + return OracleUtility.GetSQLResult(strGetOracleTableList, sqlConn); + } + catch (Exception ex) + { + ErrorHandler.WriteErrorLog("Form1.ShowOracleTableList", ex); + return null; + } + } + + private DataTable ShowOracleColumnList(OracleConnection sqlConn, string strTableName) + { + try + { + string strGetOracleColumnList = "Select COLUMN_NAME,DATA_TYPE From ALL_TAB_COLUMNS Where TABLE_NAME ='" + strTableName + "' Order by COLUMN_NAME"; + return OracleUtility.GetSQLResult(strGetOracleColumnList, sqlConn); + } + catch (Exception ex) + { + ErrorHandler.WriteErrorLog("Form1.ShowOracleColumnList", ex); + return null; + } + } + + private void ShowOracleTargetColumnList(OracleConnection sqlConn, string strTableName) + { + try + { + string strGetOracleColumnList = "Select COLUMN_NAME From ALL_TAB_COLUMNS Where TABLE_NAME ='" + strTableName + "' Order by COLUMN_NAME"; + this.clTargetColumn.DisplayMember = "COLUMN_NAME"; + this.clTargetColumn.DataSource = OracleUtility.GetSQLResult(strGetOracleColumnList, sqlConn); + Application.DoEvents(); + } + catch (Exception ex) + { + ErrorHandler.WriteErrorLog("Form1.ShowOracleTargetColumnList", ex); + } + } + + private void ExportToOracleData(string strPath, string subFileName) + { + ProgressForm pgsForm = new ProgressForm(); + int intDataCount = 0; + int intMaxData = 0; + int intProgress = 0; + string strGenResult = ""; + string strSourceTable = ""; + string strTargetColumns = ""; + string strWhere = ""; + string strTargetTable = ""; + string strDeleteCommand = ""; + string strValues = ""; + string strFileCount = ""; + string[] strColumns = null; + string[,] strColumnResults = new string[dgvExportList.Rows.Count, 2]; + string strSelectCommand = ""; + + try + { + //命令字串處理 + strTargetColumns = ""; + + //取得每個檔案最大筆數 + if (Int32.Parse(txtMaxCount.Text.Trim()) > 0) + { + intMaxData = Int32.Parse(txtMaxCount.Text.Trim()); + } + else + { + intMaxData = 1; + } + + //取得欄位對應字串陣列 + pgsForm.WindowState = FormWindowState.Normal; + pgsForm.pbExport.Minimum = 0; + pgsForm.Show(); + foreach (DataGridViewRow dgvRow in dgvExportList.Rows) + { + if (dgvRow.Cells["clExport"].Value != null && (bool)dgvRow.Cells["clExport"].Value == true) + { + strSelectCommand = ""; + strSourceTable = ""; + strTargetColumns = ""; + strDeleteCommand = ""; + strValues = ""; + + DataTable dtResult = null; + + //取得欄位對應 + if (dgvRow.Cells["clMappingData"].Value != null) + { + strColumns = dgvRow.Cells["clMappingData"].Value.ToString().Split('|'); + } + //取得來源Table + if (dgvRow.Cells["clSourceTable"].Value != null) + { + if (dgvRow.Cells["clSourceTable"].Value.ToString().Trim() != "") + { + strSourceTable = dgvRow.Cells["clSourceTable"].Value.ToString(); + } + } + //取得目標Table + if (dgvRow.Cells["clTargetTable"].Value != null) + { + if (dgvRow.Cells["clTargetTable"].Value.ToString().Trim() != "") + { + strTargetTable = dgvRow.Cells["clTargetTable"].Value.ToString(); + } + } + + //取得Where條件 + if (dgvRow.Cells["clWhere"].Value != null) + { + if (dgvRow.Cells["clWhere"].Value.ToString().Trim() != "") + { + strWhere = " " + dgvRow.Cells["clWhere"].Value.ToString(); + } + } + #region 產生來源資料查詢命令 + strGenResult = GenExpSourceCommand(strColumns, strSourceClass, strSourceTable, strWhere); + strSelectCommand = strGenResult.Substring(0, strGenResult.IndexOf('|')).Trim(); + strTargetColumns = strGenResult.Substring(strGenResult.IndexOf('|') + 1).Trim(); + + switch (strSourceClass) + { + case "MS-SQL": + dtResult = GetMSSQLResult(strSelectCommand, sqlMSSourceConn).Tables["Result"]; + break; + case "MySQL": + dtResult = GetMySQLResult(strSelectCommand, sqlMySourceConn).Tables["Result"]; + break; + case "Oracle": + dtResult = GetOracleResult(strSelectCommand, sqlOraSourceConn).Tables["Result"]; + break; + case "PostgreSQL": + dtResult = GetPostgreSQLResult(strSelectCommand.ToString(), sqlPsgSourceConn).Tables["Result"]; + break; + } + #endregion + //產生匯出資料語法 + if (dtResult.Rows.Count > 0) + { + //Progess bar + intProgress = 0; + pgsForm.pbExport.Value = 0; + pgsForm.pbExport.Maximum = dtResult.Rows.Count; + + if (dgvRow.Cells["clTargetTable"].Value != null) + { + strTargetTable = dgvRow.Cells["clTargetTable"].Value.ToString(); + + //撰寫實體檔案 + if (intMaxData == 1) + { + //無設定最大筆數 + Utility.WriteFile(strPath + ".sql", string.Format("/*======================================================={0}======================================================*/", strTargetTable)); + Utility.WriteFile(strPath + ".sql", " "); + } + else + { + //有設定最大筆數 + if (strFileCount == "0") + strFileCount = ""; + + Utility.WriteFile(strPath + strFileCount + ".sql", string.Format("/*======================================================={0}======================================================*/", strTargetTable)); + Utility.WriteFile(strPath + strFileCount + ".sql", " "); + } + } + + //勾選清除目標資料表 + if (dgvRow.Cells["clTableDel"].Value != null && Convert.ToBoolean(dgvRow.Cells["clTableDel"].Value) == false) + { + strDeleteCommand = string.Format("Delete From {0} ", strTargetTable); + + if (dgvRow.Cells["clWhere"].Value != null) + { + if (dgvRow.Cells["clWhere"].Value.ToString().Trim() != "") + { + strDeleteCommand += "Where 1=1 And " + dgvRow.Cells["clWhere"].Value.ToString(); + } + } + //撰寫實體檔案 + if (intMaxData == 1) + { + //無設定最大筆數 + Utility.WriteFile(strPath + ".sql", strDeleteCommand + ";"); + } + else + { + //有設定最大筆數 + if (strFileCount == "0") + strFileCount = ""; + + Utility.WriteFile(strPath + strFileCount + ".sql", strDeleteCommand + ";"); + } + } + + //處理筆數上限似資料匯出 + foreach (DataRow dr in dtResult.Rows) + { + foreach (DataColumn dc in dtResult.Columns) + { + if (strValues == "") + { + switch (dc.DataType.ToString().ToUpper()) + { + case "SYSTEM.DATETIME": + strValues = ConvertOracleDataType(DateTime.Parse(dr[dc].ToString()), dc.DataType.ToString()); + break; + default: + strValues = ConvertOracleDataType(dr[dc].ToString().Trim(), dc.DataType.ToString()); + break; + } + + } + else + { + switch (dc.DataType.ToString().ToUpper()) + { + case "SYSTEM.DATETIME": + strValues += "," + ConvertOracleDataType(DateTime.Parse(dr[dc].ToString()), dc.DataType.ToString()); + break; + default: + strValues += "," + ConvertOracleDataType(dr[dc].ToString().Trim(), dc.DataType.ToString()); + break; + } + + } + } + + //撰寫實體檔案 + if (intMaxData == 1) + { + //無設定最大筆數 + Utility.WriteFile(strPath + ".sql", string.Format("Insert Into {0} ({1}) Values ({2}) ;", strTargetTable, strTargetColumns, strValues)); + } + else + { + //有設定最大筆數 + if (strFileCount == "0") + strFileCount = ""; + Utility.WriteFile(strPath + strFileCount + ".sql", string.Format("Insert Into {0} ({1}) Values ({2}) ;", strTargetTable, strTargetColumns, strValues)); + } + intDataCount += 1; + intProgress += 1; + pgsForm.pbExport.Value = intProgress; //變化Progess的狀態 + Application.DoEvents(); + strFileCount = (intDataCount / intMaxData).ToString(); //切分檔案 + strValues = ""; //清除已經存在的資料 + } + + //撰寫實體檔案 + if (intMaxData != 1) + { + //有設定最大筆數 + if (strFileCount == "0") + strFileCount = ""; + } + } + } + } + + MessageBox.Show("匯出完成"); + } + catch (Exception ex) + { + + MessageBox.Show("匯出失敗"); + ErrorHandler.WriteErrorLog("Form1.ExportToMSSQLData", ex); + } + finally + { + pgsForm.Close(); + } + } + + private string ConvertOracleColumnType(string strSourceCol, string strTargetCol, string strType) + { + return strSourceCol + " AS " + strTargetCol; + + //switch (strType.ToUpper()) + //{ + // case "VARCHAR2": + // return strSourceCol + " AS " + strTargetCol; + // case "NUMBER": + // return strSourceCol + " AS " + strTargetCol; + // case "FLOAT": + // return strSourceCol + " AS " + strTargetCol; + // case "INT": + // return strSourceCol + " AS " + strTargetCol; + // case "TIMESTAMP(0)": + // return strSourceCol + " AS " + strTargetCol; + // case "TIMESTAMP": + // return strSourceCol + " AS " + strTargetCol; + // default: + // return strSourceCol + " AS " + strTargetCol; + //} + } + + private string ConvertOracleDataType(string strData, string strType) + { + if (strData == "") + { + return "Null"; + } + switch (strType.ToUpper()) + { + case "SYSTEM.STRING": + return "'" + strData.ToString().Trim() + "'"; + case "SYSTEM.DECIMAL": + return strData.ToString().Trim(); + default: + return "'" + strData.ToString().Trim() + "'"; + } + } + + private string ConvertOracleDataType(DateTime dtData, string strType) + { + return "TO_TIMESTAMP('" + dtData.ToString("yyyy-MM-dd HH:mm:ss") + "', 'YYYY-MM-DD HH24:MI:SS')"; + } + #endregion //End of Oracle + private string CheckSource() { try @@ -1710,6 +2153,8 @@ namespace ExportDataToFile { cbTargetClass.Enabled = false; cbTargetTable.Enabled = true; + cbTargetTable.ValueMember = "TableName"; + cbTargetTable.DisplayMember = "TableName"; cbTargetTable.SelectedIndex = -1; txtTargetIP.Enabled = false; txtTargetPort.Enabled = false; @@ -1730,7 +2175,9 @@ namespace ExportDataToFile { cbTargetClass.Enabled = true; cbTargetTable.DataSource = null; - //cbTargetTable.Enabled = false; + cbTargetTable.ValueMember = "TableName"; + cbTargetTable.DisplayMember = "TableName"; + cbTargetTable.Enabled = false; txtTargetIP.Enabled = true; txtTargetPort.Enabled = true; txtTargetID.Enabled = true; @@ -1862,7 +2309,8 @@ namespace ExportDataToFile Application.DoEvents(); break; case "Oracle": - + dtResult = ShowOracleColumnList(sqlOraSourceConn, strTarget.ToString()); + Application.DoEvents(); break; case "PostgreSQL": dtResult = ShowPostgreSQLColumnList(sqlPsgSourceConn, strTarget.ToString()); @@ -1950,7 +2398,7 @@ namespace ExportDataToFile dtResult = MySQLUtility.GetTable(strTableName, 200, sqlMySourceConn); break; case "Oracle": - + dtResult = OracleUtility.GetTable(strTableName, 200, sqlOraSourceConn); break; case "PostgreSQL": dtResult = PostgreSQLUtility.GetTable(strTableName, 200, sqlPsgSourceConn); @@ -2043,7 +2491,21 @@ namespace ExportDataToFile } break; case "Oracle": + if (strTargetCol == "") + { + strTargetCol = strSourceCol; + } + if (strSourceColumns == "") + { + strSourceColumns += ConvertOracleColumnType(strSourceCol, strTargetCol, strSourceType); + strTargetColumns += strTargetCol; + } + else + { + strSourceColumns += "," + ConvertOracleColumnType(strSourceCol, strTargetCol, strSourceType); + strTargetColumns += "," + strTargetCol; + } break; case "PostgreSQL": if (strTargetCol == "") @@ -2092,7 +2554,15 @@ namespace ExportDataToFile } break; case "Oracle": + if (strSourceTable != "") + { + strSelectCommand += string.Format("Select {0} From {1} ", strSourceColumns, strSourceTable); + } + if (strWhere.Trim() != "") + { + strSelectCommand += "Where 1=1 And " + strWhere.Trim(); + } break; case "PostgreSQL": if (strSourceTable != "") @@ -2117,6 +2587,6 @@ namespace ExportDataToFile } - #endregion + #endregion } } diff --git a/packages.config b/packages.config index ab11b3c..79155bb 100644 --- a/packages.config +++ b/packages.config @@ -7,6 +7,7 @@ +