You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2588 lines
115 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Data.SqlClient;
  6. using System.Drawing;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Xml.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Forms;
  13. using Npgsql;
  14. using MySqlConnector;
  15. using Oracle.ManagedDataAccess.Client;
  16. using ManagementSystem.Utility;
  17. namespace ExportDataToFile
  18. {
  19. public partial class Form1 : Form
  20. {
  21. //參數設定
  22. int intExportIndex = -1;
  23. bool blSourceConnStatus = false;
  24. bool blTargetConnStatus = false;
  25. string strSourceClass = "";
  26. string strTargetClass = "";
  27. //MS-SQL
  28. SqlConnection sqlMSSourceConn = null; //new SqlConnection();
  29. SqlConnection sqlMSTargetConn = null; //new SqlConnection();
  30. //PostgreSQL
  31. NpgsqlConnection sqlPsgSourceConn = null; //new NpgsqlConnection();
  32. NpgsqlConnection sqlPsgTargetConn = null; //new NpgsqlConnection();
  33. //MySQL
  34. MySqlConnection sqlMySourceConn = null; //new MySqlConnection();
  35. MySqlConnection sqlMyTargetConn = null; //new MySqlConnection();
  36. //Oracle
  37. OracleConnection sqlOraSourceConn = null; //new OracleConnection();
  38. OracleConnection sqlOraTargetConn = null; //new OracleConnection();
  39. public Form1()
  40. {
  41. InitializeComponent();
  42. }
  43. private void Form1_Load(object sender, EventArgs e)
  44. {
  45. }
  46. private void btnSourceConnTest_Click(object sender, EventArgs e)
  47. {
  48. try
  49. {
  50. string strCheck = CheckSource();
  51. //查詢來源資料庫中的資料表
  52. string strIP = txtSourceIP.Text.Trim();
  53. string strPort = txtSourcePort.Text.Trim();
  54. string strDBName = txtSourceDBName.Text.Trim();
  55. string strID = txtSourceID.Text.Trim();
  56. string strPWD = txtSourcePWD.Text.Trim();
  57. DataTable dtResult = null;
  58. if (strCheck == "")
  59. {
  60. if (cbSourceClass.Enabled)
  61. {
  62. LockSourceForm();
  63. switch (cbSourceClass.SelectedItem.ToString().Trim())
  64. {
  65. case "MS-SQL":
  66. //MS-SQL
  67. sqlMSSourceConn = new SqlConnection();
  68. sqlMSTargetConn = new SqlConnection();
  69. sqlMSSourceConn = MSSQLUtility.GetConn(strIP, strDBName, strID, strPWD, strPort);
  70. if (sqlMSSourceConn == null)
  71. {
  72. MessageBox.Show("連線失敗,請查詢連線資訊");
  73. }
  74. dtResult = ShowMSSQLTableList(sqlMSSourceConn);
  75. strSourceClass = "MS-SQL";
  76. Application.DoEvents();
  77. break;
  78. case "MySQL":
  79. //MySQL
  80. sqlMySourceConn = new MySqlConnection();
  81. sqlMyTargetConn = new MySqlConnection();
  82. sqlMySourceConn = MySQLUtility.GetConn(strIP, strDBName, strID, strPWD, strPort);
  83. if (sqlMySourceConn == null)
  84. {
  85. MessageBox.Show("連線失敗,請查詢連線資訊");
  86. }
  87. dtResult = ShowMySQLTableList(sqlMySourceConn, strDBName);
  88. strSourceClass = "MySQL";
  89. Application.DoEvents();
  90. break;
  91. case "Oracle":
  92. //Oracle
  93. sqlOraSourceConn = new OracleConnection();
  94. sqlOraTargetConn = new OracleConnection();
  95. sqlOraSourceConn = OracleUtility.GetConn(strIP, strDBName, strID, strPWD, strPort);
  96. if (sqlOraSourceConn == null)
  97. {
  98. MessageBox.Show("連線失敗,請查詢連線資訊");
  99. }
  100. dtResult = ShowOracleTableList(sqlOraSourceConn, strDBName);
  101. strSourceClass = "Oracle";
  102. Application.DoEvents();
  103. break;
  104. case "PostgreSQL":
  105. //PostgreSQL
  106. sqlPsgSourceConn = new NpgsqlConnection();
  107. sqlPsgTargetConn = new NpgsqlConnection();
  108. sqlPsgSourceConn = PostgreSQLUtility.GetConn(strIP, strDBName, strID, strPWD, strPort);
  109. if (sqlPsgSourceConn == null)
  110. {
  111. MessageBox.Show("連線失敗,請查詢連線資訊");
  112. }
  113. dtResult = ShowPostgreSQLTablesList(sqlPsgSourceConn);
  114. strSourceClass = "PostgreSQL";
  115. Application.DoEvents();
  116. break;
  117. }
  118. dgvExportList.DataSource = dtResult;
  119. blSourceConnStatus = true;
  120. EnableExport(); //啟動匯出鈕
  121. }
  122. else
  123. {
  124. UnLockSourceForm();
  125. }
  126. }
  127. else
  128. {
  129. MessageBox.Show(strCheck);
  130. }
  131. }
  132. catch (Exception ex)
  133. {
  134. UnLockSourceForm();
  135. MessageBox.Show("連線失敗,請查詢連線資訊");
  136. ErrorHandler.WriteErrorLog("Form1.btnSourceConnTest_Click", ex);
  137. }
  138. }
  139. private void btnTargetConnTest_Click(object sender, EventArgs e)
  140. {
  141. try
  142. {
  143. string strCheck = CheckTarget();
  144. //查詢目標資料庫中的資料表
  145. string strIP = txtTargetIP.Text.Trim();
  146. string strPort = txtTargetPort.Text.Trim();
  147. string strDBName = txtTargetDBName.Text.Trim();
  148. string strID = txtTargetID.Text.Trim();
  149. string strPWD = txtTargetPWD.Text.Trim();
  150. DataTable dtResult = null;
  151. if (strCheck == "")
  152. {
  153. if (cbTargetClass.Enabled)
  154. {
  155. LockTargetForm();
  156. switch (cbTargetClass.SelectedItem.ToString().Trim())
  157. {
  158. case "MS-SQL":
  159. sqlMSTargetConn = MSSQLUtility.GetConn(strIP, strDBName, strID, strPWD, strPort);
  160. dtResult = ShowMSSQLTableList(sqlMSTargetConn);
  161. strTargetClass = "MS-SQL";
  162. break;
  163. case "MySQL":
  164. sqlMyTargetConn = MySQLUtility.GetConn(strIP, strDBName, strID, strPWD, strPort);
  165. dtResult = ShowMySQLTableList(sqlMyTargetConn, strDBName);
  166. strTargetClass = "MySQL";
  167. Application.DoEvents();
  168. break;
  169. case "Oracle":
  170. sqlOraTargetConn = OracleUtility.GetConn(strIP, strDBName, strID, strPWD, strPort);
  171. dtResult = ShowOracleTableList(sqlOraTargetConn, strDBName);
  172. strTargetClass = "Oracle";
  173. Application.DoEvents();
  174. break;
  175. case "PostgreSQL":
  176. sqlPsgTargetConn = PostgreSQLUtility.GetConn(strIP, strDBName, strID, strPWD, strPort);
  177. dtResult = ShowPostgreSQLTablesList(sqlPsgTargetConn);
  178. strTargetClass = "PostgreSQL";
  179. break;
  180. }
  181. cbTargetTable.DataSource = dtResult;
  182. cbTargetTable.SelectedIndex = -1;
  183. blTargetConnStatus = true;
  184. EnableExport(); //啟動匯出鈕
  185. Application.DoEvents();
  186. }
  187. else
  188. {
  189. UnLockTargetForm();
  190. Form1_FormClosing(null,null);
  191. }
  192. }
  193. else
  194. {
  195. MessageBox.Show(strCheck);
  196. }
  197. }
  198. catch (Exception ex)
  199. {
  200. MessageBox.Show("連線失敗,請查詢連線資訊");
  201. ErrorHandler.WriteErrorLog("Form1.btnTargetConnTest_Click", ex);
  202. }
  203. }
  204. private void dgvExportList_CellClick(object sender, DataGridViewCellEventArgs e)
  205. {
  206. try
  207. {
  208. if (intExportIndex != e.RowIndex)
  209. {
  210. LocatedTarget(e.RowIndex);
  211. }
  212. }
  213. catch (Exception ex)
  214. {
  215. ErrorHandler.WriteErrorLog("Form1.dgvExportList_CellClick", ex);
  216. }
  217. }
  218. private void dgvExportList_CellContentClick(object sender, DataGridViewCellEventArgs e)
  219. {
  220. try
  221. {
  222. var senderGrid = (DataGridView)sender;
  223. if (e.RowIndex >= 0)
  224. {
  225. //清除該列資料
  226. if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && senderGrid.Columns[e.ColumnIndex].Name == "clCancel")
  227. {
  228. CleanExpRow(dgvExportList, e.RowIndex);
  229. }
  230. //顯示結果資料
  231. if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && senderGrid.Columns[e.ColumnIndex].Name == "clShow")
  232. {
  233. ShowRow(dgvExportList, e.RowIndex);
  234. }
  235. }
  236. }
  237. catch (Exception ex)
  238. {
  239. ErrorHandler.WriteErrorLog("Form1.dgvExportList_CellContentClick", ex);
  240. }
  241. }
  242. private void cbTargetTable_SelectedIndexChanged(object sender, EventArgs e)
  243. {
  244. try
  245. {
  246. DataTable dtResult = null;
  247. if (strTargetClass != "" && intExportIndex != -1)
  248. {
  249. if (cbTargetTable.SelectedValue != null)
  250. {
  251. //重新修改DataGridView的ComboBox的內容
  252. switch (strTargetClass)
  253. {
  254. case "MS-SQL":
  255. dtResult = ShowMSSQLColumnList(sqlMSTargetConn, cbTargetTable.SelectedValue.ToString());
  256. this.clTargetColumn.DisplayMember = "COLUMN_NAME";
  257. break;
  258. case "MySQL":
  259. dtResult = ShowMySQLColumnList(sqlMyTargetConn, cbTargetTable.SelectedValue.ToString(), txtTargetDBName.Text.Trim());
  260. this.clTargetColumn.DisplayMember = "Field";
  261. break;
  262. case "Oracle":
  263. dtResult = ShowOracleColumnList(sqlOraTargetConn, cbTargetTable.SelectedValue.ToString());
  264. this.clTargetColumn.DisplayMember = "COLUMN_NAME";
  265. break;
  266. case "PostgreSQL":
  267. dtResult = ShowPostgreSQLColumnList(sqlPsgTargetConn, cbTargetTable.SelectedValue.ToString());
  268. this.clTargetColumn.DisplayMember = "COLUMN_NAME";
  269. break;
  270. }
  271. this.clTargetColumn.DataSource = dtResult;
  272. }
  273. }
  274. }
  275. catch (Exception ex)
  276. {
  277. ErrorHandler.WriteErrorLog("Form1.cbTargetTable_SelectedIndexChanged", ex);
  278. }
  279. }
  280. private void dgvColumnMapping_CellContentClick(object sender, DataGridViewCellEventArgs e)
  281. {
  282. try
  283. {
  284. var senderGrid = (DataGridView)sender;
  285. //觸發清除事件
  286. if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0)
  287. {
  288. senderGrid.Rows[e.RowIndex].Cells["clExpColumn"].Value = false;
  289. ((DataGridViewComboBoxCell)senderGrid.Rows[e.RowIndex].Cells["clTargetColumn"]).Value = null;
  290. }
  291. }
  292. catch (Exception ex)
  293. {
  294. ErrorHandler.WriteErrorLog("Form1.dgvColumnMapping_CellContentClick", ex);
  295. }
  296. }
  297. private void btnExport_Click(object sender, EventArgs e)
  298. {
  299. try
  300. {
  301. if (cbSourceClass.SelectedIndex > 0)
  302. {
  303. string strPath = "";
  304. sfPath.AddExtension = false;
  305. sfPath.Filter = "All files (*.*)|*.*";
  306. sfPath.FileName = "Output" + DateTime.Now.ToString("_yyyyMMddHHmmss");
  307. if (sfPath.ShowDialog() == DialogResult.Cancel) //如果按下取消,放棄後面動作
  308. return;
  309. strPath = sfPath.FileName;
  310. //應依不同的來源,處理查詢字串
  311. switch (strTargetClass)
  312. {
  313. case "MS-SQL": //匯出MS-SQL檔
  314. ExportToMSSQLData(sfPath.FileName,sfPath.DefaultExt);
  315. break;
  316. case "MySQL":
  317. ExportToMySQLData(sfPath.FileName, sfPath.DefaultExt);
  318. break;
  319. case "Oracle":
  320. ExportToOracleData(sfPath.FileName, sfPath.DefaultExt);
  321. break;
  322. case "PostgreSQL":
  323. ExportToPostgreSQLData(sfPath.FileName, sfPath.DefaultExt);
  324. break;
  325. }
  326. }
  327. }
  328. catch (Exception ex)
  329. {
  330. ErrorHandler.WriteErrorLog("Form1.btnExport_Click", ex);
  331. }
  332. }
  333. private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  334. {
  335. //MS-SQL
  336. //sqlMSSourceConn.Close();
  337. sqlMSSourceConn = null;
  338. //sqlMSTargetConn.Close();
  339. sqlMSTargetConn = null;
  340. //PostgreSQL
  341. //sqlPsgSourceConn.Close();
  342. sqlPsgSourceConn = null;
  343. //sqlPsgTargetConn.Close();
  344. sqlPsgTargetConn = null;
  345. //MySQL
  346. //sqlMySourceConn.Close();
  347. sqlMySourceConn = null;
  348. //sqlMyTargetConn.Close();
  349. sqlMyTargetConn = null;
  350. //Oracle
  351. //sqlOraSourceConn.Close();
  352. sqlOraSourceConn = null;
  353. //sqlOraTargetConn.Close();
  354. sqlOraTargetConn = null;
  355. }
  356. private void btnMapping_Click(object sender, EventArgs e)
  357. {
  358. if (dgvColumnMapping.DataSource == null)
  359. return;
  360. //自動預設產生所有的Mapping檔案
  361. dgvExportList.Rows[intExportIndex].Cells["clMappingData"].Value = GenMappingColumn();
  362. dgvExportList.Rows[intExportIndex].Cells["clExport"].Value = true;
  363. //設定來源與目標的資料表對應
  364. if (cbTargetTable.SelectedValue == null)
  365. {
  366. MessageBox.Show("請選擇目標資料表");
  367. }
  368. else
  369. {
  370. dgvExportList.Rows[intExportIndex].Cells["clTargetTable"].Value = cbTargetTable.SelectedValue.ToString();
  371. dgvExportList.Rows[intExportIndex].Cells["clWhere"].Value = txtWhere.Text.Trim();
  372. }
  373. }
  374. private void cbSourceClass_SelectedValueChanged(object sender, EventArgs e)
  375. {
  376. if (((ComboBox)sender).SelectedIndex != -1)
  377. {
  378. switch (cbSourceClass.SelectedItem.ToString())
  379. {
  380. case "MS-SQL":
  381. txtSourcePort.Text = "1433";
  382. break;
  383. case "MySQL":
  384. txtSourcePort.Text = "3306";
  385. break;
  386. case "Oracle":
  387. txtSourcePort.Text = "1521";
  388. break;
  389. case "PostgreSQL":
  390. txtSourcePort.Text = "5432";
  391. break;
  392. }
  393. }
  394. }
  395. private void cbTargetClass_SelectedValueChanged(object sender, EventArgs e)
  396. {
  397. if (((ComboBox)sender).SelectedIndex != -1)
  398. {
  399. switch (cbTargetClass.SelectedItem.ToString())
  400. {
  401. case "MS-SQL":
  402. txtTargetPort.Text = "1433";
  403. break;
  404. case "MySQL":
  405. txtTargetPort.Text = "3306";
  406. break;
  407. case "Oracle":
  408. txtTargetPort.Text = "1521";
  409. break;
  410. case "PostgreSQL":
  411. txtTargetPort.Text = "5432";
  412. break;
  413. }
  414. }
  415. }
  416. private void btnExportXML_Click(object sender, EventArgs e)
  417. {
  418. try
  419. {
  420. //參數設定
  421. string strXMLFile = ".\\File.xml";
  422. string strSourceTable = "";
  423. string strTargetTable = "";
  424. string strDeleteTable = "";
  425. string strWhere = "";
  426. string strMappingData = "";
  427. XElement xmlRoot = new XElement("Root");
  428. //匯出來源設定
  429. XElement xHead = new XElement("Head");
  430. xmlRoot.Add(xHead);
  431. if (cbSourceClass.SelectedIndex != -1)
  432. {
  433. XElement xSourceDetail = new XElement("SourceDetail");
  434. xSourceDetail.Add(new XAttribute("SourceClass", cbSourceClass.SelectedItem.ToString()));
  435. xSourceDetail.Add(new XAttribute("SourceIP", txtSourceIP.Text.Trim()));
  436. xSourceDetail.Add(new XAttribute("SourcePort", txtSourcePort.Text.Trim()));
  437. xSourceDetail.Add(new XAttribute("SourceDBName", txtSourceDBName.Text.Trim()));
  438. xSourceDetail.Add(new XAttribute("SourceID", txtSourceID.Text.Trim()));
  439. xSourceDetail.Add(new XAttribute("SourcePWD", txtSourcePWD.Text.Trim()));
  440. xHead.Add(xSourceDetail);
  441. }
  442. if (cbTargetClass.SelectedIndex != -1)
  443. {
  444. XElement xTargetDetail = new XElement("TargetDetail");
  445. xTargetDetail.Add(new XAttribute("TargetClass", cbTargetClass.SelectedItem.ToString()));
  446. xTargetDetail.Add(new XAttribute("TargetIP", txtTargetIP.Text.Trim()));
  447. xTargetDetail.Add(new XAttribute("TargetPort", txtTargetPort.Text.Trim()));
  448. xTargetDetail.Add(new XAttribute("TargetDBName", txtTargetDBName.Text.Trim()));
  449. xTargetDetail.Add(new XAttribute("TargetID", txtTargetID.Text.Trim()));
  450. xTargetDetail.Add(new XAttribute("TargetPWD", txtTargetPWD.Text.Trim()));
  451. xHead.Add(xTargetDetail);
  452. XElement xDetail = new XElement("Detail");
  453. xmlRoot.Add(xDetail);
  454. //匯出內容
  455. foreach (DataGridViewRow dgvRow in dgvExportList.Rows)
  456. {
  457. if (dgvRow.Cells["clExport"].Value != null && (bool)dgvRow.Cells["clExport"].Value == true)
  458. {
  459. XElement xColumnSetting = new XElement("ColumnSetting");
  460. strSourceTable = dgvRow.Cells["clSourceTable"].Value.ToString();
  461. strTargetTable = dgvRow.Cells["clTargetTable"].Value.ToString();
  462. if (dgvRow.Cells["clTableDel"].Value != null && Convert.ToBoolean(dgvRow.Cells["clTableDel"].Value) != false)
  463. {
  464. strDeleteTable = "true";
  465. }
  466. else
  467. {
  468. strDeleteTable = "false";
  469. }
  470. strWhere = dgvRow.Cells["clWhere"].Value.ToString();
  471. strMappingData = dgvRow.Cells["clMappingData"].Value.ToString();
  472. xColumnSetting.Add(new XAttribute("SourceTable", strSourceTable));
  473. xColumnSetting.Add(new XAttribute("TargetTable", strTargetTable));
  474. xColumnSetting.Add(new XAttribute("DeleteTable", strDeleteTable));
  475. xColumnSetting.Add(new XAttribute("Where", strWhere));
  476. xColumnSetting.Add(new XAttribute("MappingData", strMappingData));
  477. xDetail.Add(xColumnSetting);
  478. }
  479. }
  480. xmlRoot.Save(strXMLFile);
  481. MessageBox.Show("匯出成功");
  482. }
  483. }
  484. catch (Exception ex)
  485. {
  486. MessageBox.Show("匯出失敗");
  487. ErrorHandler.WriteErrorLog("Form1.cs", ex);
  488. }
  489. }
  490. private void btnImportXML_Click(object sender, EventArgs e)
  491. {
  492. string strFilePath = "";
  493. string strXMLSourceTable = "";
  494. ofPath.Filter = "XML Files(*.xml) | *.xml";
  495. ofPath.InitialDirectory = ".\\";
  496. if (ofPath.ShowDialog() == DialogResult.OK)
  497. {
  498. strFilePath = ofPath.FileName;
  499. if (File.Exists(strFilePath))
  500. {
  501. XDocument xmlContent = XDocument.Load(strFilePath);
  502. foreach (XElement xmlHeadData in xmlContent.Descendants("Head"))
  503. {
  504. //匯入來源設定
  505. cbSourceClass.SelectedItem = xmlHeadData.Element("SourceDetail").Attribute("SourceClass").Value.ToString();
  506. txtSourceIP.Text = xmlHeadData.Element("SourceDetail").Attribute("SourceIP").Value.ToString();
  507. txtSourcePort.Text = xmlHeadData.Element("SourceDetail").Attribute("SourcePort").Value.ToString();
  508. txtSourceDBName.Text = xmlHeadData.Element("SourceDetail").Attribute("SourceDBName").Value.ToString();
  509. txtSourceID.Text = xmlHeadData.Element("SourceDetail").Attribute("SourceID").Value.ToString();
  510. txtSourcePWD.Text = xmlHeadData.Element("SourceDetail").Attribute("SourcePWD").Value.ToString();
  511. btnSourceConnTest_Click(null, null);
  512. //匯入目標設定
  513. cbTargetClass.SelectedItem = xmlHeadData.Element("TargetDetail").Attribute("TargetClass").Value.ToString();
  514. txtTargetIP.Text = xmlHeadData.Element("TargetDetail").Attribute("TargetIP").Value.ToString();
  515. txtTargetPort.Text = xmlHeadData.Element("TargetDetail").Attribute("TargetPort").Value.ToString();
  516. txtTargetDBName.Text = xmlHeadData.Element("TargetDetail").Attribute("TargetDBName").Value.ToString();
  517. txtTargetID.Text = xmlHeadData.Element("TargetDetail").Attribute("TargetID").Value.ToString();
  518. txtTargetPWD.Text = xmlHeadData.Element("TargetDetail").Attribute("TargetPWD").Value.ToString();
  519. btnTargetConnTest_Click(null, null);
  520. }
  521. foreach (XElement xmlDetail in xmlContent.Descendants("ColumnSetting"))
  522. {
  523. strXMLSourceTable = xmlDetail.Attribute("SourceTable").Value.ToString();
  524. foreach (DataGridViewRow dgvRow in dgvExportList.Rows)
  525. {
  526. if (dgvRow.Cells["clSourceTable"].Value.ToString() == strXMLSourceTable)
  527. {
  528. dgvRow.Cells["clExport"].Value = true;
  529. dgvRow.Cells["clTargetTable"].Value = xmlDetail.Attribute("TargetTable").Value.ToString();
  530. dgvRow.Cells["clTableDel"].Value = Convert.ToBoolean(xmlDetail.Attribute("DeleteTable").Value.ToString());
  531. dgvRow.Cells["clWhere"].Value = xmlDetail.Attribute("Where").Value.ToString();
  532. dgvRow.Cells["clMappingData"].Value = xmlDetail.Attribute("MappingData").Value.ToString();
  533. break;
  534. }
  535. }
  536. }
  537. }
  538. }
  539. }
  540. private void btnClean_Click(object sender, EventArgs e)
  541. {
  542. UnLockSourceForm();
  543. cbSourceClass.SelectedIndex = -1;
  544. txtSourceIP.Text = "";
  545. txtSourcePort.Text = "";
  546. txtSourceDBName.Text = "";
  547. txtSourceID.Text = "";
  548. txtSourcePWD.Text = "";
  549. UnLockTargetForm();
  550. cbTargetClass.SelectedIndex = -1;
  551. txtTargetIP.Text = "";
  552. txtTargetPort.Text = "";
  553. txtTargetDBName.Text = "";
  554. txtTargetID.Text = "";
  555. txtTargetPWD.Text = "";
  556. cbTargetTable.SelectedIndex = -1;
  557. cbTargetTable.Enabled = false;
  558. CleanRows(dgvExportList);
  559. CleanRows(dgvColumnMapping);
  560. sqlMSSourceConn = null;
  561. sqlMSTargetConn = null;
  562. sqlPsgSourceConn = null;
  563. sqlPsgTargetConn = null;
  564. sqlMySourceConn = null;
  565. sqlMyTargetConn = null;
  566. sqlOraSourceConn = null;
  567. sqlOraTargetConn = null;
  568. btnImportXML.Enabled = true;
  569. btnExportXML.Enabled = false;
  570. btnExport.Enabled = false;
  571. btnMapping.Enabled = false;
  572. }
  573. #region 自定義功能
  574. #region MS-SQL
  575. public DataSet GetMSSQLResult(string strSQL,SqlConnection conn)
  576. {
  577. DataSet dsData = new DataSet();
  578. try
  579. {
  580. using (SqlDataAdapter sqlAdapter = new SqlDataAdapter(strSQL, conn))
  581. {
  582. if (conn.State == ConnectionState.Closed) //判斷連線狀態
  583. {
  584. conn.Open();
  585. blSourceConnStatus = true;
  586. }
  587. sqlAdapter.Fill(dsData, "Result");
  588. }
  589. return dsData;
  590. }
  591. catch (Exception ex)
  592. {
  593. throw ex;
  594. }
  595. }
  596. private DataTable ShowMSSQLTableList(SqlConnection sqlConn)
  597. {
  598. try
  599. {
  600. string strGetMSSQLTableList = "Select [name] as TableName from sys.tables order by name";
  601. return MSSQLUtility.GetSQLResult(strGetMSSQLTableList, sqlConn);
  602. }
  603. catch (Exception ex)
  604. {
  605. ErrorHandler.WriteErrorLog("Form1.cs", ex);
  606. return null;
  607. }
  608. }
  609. private DataTable ShowMSSQLColumnList(SqlConnection sqlConn, string strTableName)
  610. {
  611. try
  612. {
  613. string strGetMSSQLColumnList = "Select COLUMN_NAME,DATA_TYPE From INFORMATION_SCHEMA.COLUMNS Where TABLE_NAME ='" + strTableName + "' Order by ORDINAL_POSITION";
  614. return MSSQLUtility.GetSQLResult(strGetMSSQLColumnList, sqlConn);
  615. }
  616. catch (Exception ex)
  617. {
  618. ErrorHandler.WriteErrorLog("Form1.cs", ex);
  619. return null;
  620. }
  621. }
  622. private void ShowMSSQLTargetColumnList(SqlConnection sqlConn, string strTableName)
  623. {
  624. try
  625. {
  626. string strGetMSSQLColumnList = "Select COLUMN_NAME From INFORMATION_SCHEMA.COLUMNS Where TABLE_NAME ='" + strTableName + "' Order by ORDINAL_POSITION";
  627. this.clTargetColumn.DisplayMember = "COLUMN_NAME";
  628. this.clTargetColumn.DataSource = MSSQLUtility.GetSQLResult(strGetMSSQLColumnList, sqlConn);
  629. Application.DoEvents();
  630. }
  631. catch (Exception ex)
  632. {
  633. ErrorHandler.WriteErrorLog("Form1.cs", ex);
  634. }
  635. }
  636. private void ExportToMSSQLData(string strPath,string subFileName)
  637. {
  638. ProgressForm pgsForm = new ProgressForm();
  639. int intDataCount = 0;
  640. int intMaxData = 0;
  641. int intProgress = 0;
  642. string strGenResult = "";
  643. string strSourceTable = "";
  644. string strTargetColumns = "";
  645. string strWhere = "";
  646. string strTargetTable = "";
  647. string strDeleteCommand = "";
  648. string strValues = "";
  649. string strFileCount = "";
  650. string[] strColumns = null;
  651. string[,] strColumnResults = new string[dgvExportList.Rows.Count, 2];
  652. string strSelectCommand = "";
  653. try
  654. {
  655. //命令字串處理
  656. strTargetColumns = "";
  657. //取得每個檔案最大筆數
  658. if (Int32.Parse(txtMaxCount.Text.Trim()) > 0)
  659. {
  660. intMaxData = Int32.Parse(txtMaxCount.Text.Trim());
  661. }
  662. else
  663. {
  664. intMaxData = 1;
  665. }
  666. //取得欄位對應字串陣列
  667. pgsForm.WindowState = FormWindowState.Normal;
  668. pgsForm.pbExport.Minimum = 0;
  669. pgsForm.Show();
  670. foreach (DataGridViewRow dgvRow in dgvExportList.Rows)
  671. {
  672. if (dgvRow.Cells["clExport"].Value != null && (bool)dgvRow.Cells["clExport"].Value == true)
  673. {
  674. strSelectCommand = "";
  675. strSourceTable = "";
  676. strTargetColumns = "";
  677. strDeleteCommand = "";
  678. strValues = "";
  679. DataTable dtResult = null;
  680. //取得欄位對應
  681. if (dgvRow.Cells["clMappingData"].Value != null)
  682. {
  683. strColumns = dgvRow.Cells["clMappingData"].Value.ToString().Split('|');
  684. }
  685. //取得來源Table
  686. if (dgvRow.Cells["clSourceTable"].Value != null)
  687. {
  688. if (dgvRow.Cells["clSourceTable"].Value.ToString().Trim() != "")
  689. {
  690. strSourceTable = dgvRow.Cells["clSourceTable"].Value.ToString();
  691. }
  692. }
  693. //取得目標Table
  694. if (dgvRow.Cells["clTargetTable"].Value != null)
  695. {
  696. if (dgvRow.Cells["clTargetTable"].Value.ToString().Trim() != "")
  697. {
  698. strTargetTable = dgvRow.Cells["clTargetTable"].Value.ToString();
  699. }
  700. }
  701. //取得Where條件
  702. if (dgvRow.Cells["clWhere"].Value != null)
  703. {
  704. if (dgvRow.Cells["clWhere"].Value.ToString().Trim() != "")
  705. {
  706. strWhere = " " + dgvRow.Cells["clWhere"].Value.ToString();
  707. }
  708. }
  709. #region 產生來源資料查詢命令
  710. strGenResult = GenExpSourceCommand(strColumns, strSourceClass, strSourceTable, strWhere);
  711. strSelectCommand = strGenResult.Substring(0, strGenResult.IndexOf('|')).Trim();
  712. strTargetColumns = strGenResult.Substring(strGenResult.IndexOf('|') + 1).Trim();
  713. switch (strSourceClass)
  714. {
  715. case "MS-SQL":
  716. dtResult = GetMSSQLResult(strSelectCommand, sqlMSSourceConn).Tables["Result"];
  717. break;
  718. case "MySQL":
  719. dtResult = GetMySQLResult(strSelectCommand, sqlMySourceConn).Tables["Result"];
  720. break;
  721. case "Oracle":
  722. dtResult = GetOracleResult(strSelectCommand, sqlOraSourceConn).Tables["Result"];
  723. break;
  724. case "PostgreSQL":
  725. dtResult = GetPostgreSQLResult(strSelectCommand.ToString(), sqlPsgSourceConn).Tables["Result"];
  726. break;
  727. }
  728. #endregion
  729. //產生匯出資料語法
  730. if (dtResult.Rows.Count > 0)
  731. {
  732. //Progess bar
  733. intProgress = 0;
  734. pgsForm.pbExport.Value = 0;
  735. pgsForm.pbExport.Maximum = dtResult.Rows.Count;
  736. if (dgvRow.Cells["clTargetTable"].Value != null)
  737. {
  738. strTargetTable = dgvRow.Cells["clTargetTable"].Value.ToString();
  739. //撰寫實體檔案
  740. if (intMaxData == 1)
  741. {
  742. //無設定最大筆數
  743. Utility.WriteFile(strPath + ".sql", string.Format("/*======================================================={0}======================================================*/", strTargetTable));
  744. Utility.WriteFile(strPath + ".sql", "Go");
  745. Utility.WriteFile(strPath + ".sql", " ");
  746. }
  747. else
  748. {
  749. //有設定最大筆數
  750. if (strFileCount == "0")
  751. strFileCount = "";
  752. Utility.WriteFile(strPath + strFileCount + ".sql", string.Format("/*======================================================={0}======================================================*/", strTargetTable));
  753. Utility.WriteFile(strPath + strFileCount + ".sql", "Go");
  754. Utility.WriteFile(strPath + strFileCount + ".sql", " ");
  755. }
  756. }
  757. //勾選清除目標資料表
  758. if (dgvRow.Cells["clTableDel"].Value != null && Convert.ToBoolean(dgvRow.Cells["clTableDel"].Value) == false)
  759. {
  760. strDeleteCommand = string.Format("Delete From {0} ", strTargetTable);
  761. if (dgvRow.Cells["clWhere"].Value != null)
  762. {
  763. if (dgvRow.Cells["clWhere"].Value.ToString().Trim() != "")
  764. {
  765. strDeleteCommand += "Where 1=1 And " + dgvRow.Cells["clWhere"].Value.ToString();
  766. }
  767. }
  768. //撰寫實體檔案
  769. if (intMaxData == 1)
  770. {
  771. //無設定最大筆數
  772. Utility.WriteFile(strPath + ".sql", strDeleteCommand + ";");
  773. Utility.WriteFile(strPath + ".sql", "Go");
  774. }
  775. else
  776. {
  777. //有設定最大筆數
  778. if (strFileCount == "0")
  779. strFileCount = "";
  780. Utility.WriteFile(strPath + strFileCount + ".sql", strDeleteCommand + ";");
  781. Utility.WriteFile(strPath + strFileCount + ".sql", "Go");
  782. }
  783. }
  784. //處理筆數上限似資料匯出
  785. foreach (DataRow dr in dtResult.Rows)
  786. {
  787. foreach (DataColumn dc in dtResult.Columns)
  788. {
  789. if (strValues == "")
  790. {
  791. switch (dc.DataType.ToString().ToUpper())
  792. {
  793. case "SYSTEM.DATETIME":
  794. strValues = ConvertMSSQLDataType(DateTime.Parse(dr[dc].ToString()), dc.DataType.ToString());
  795. break;
  796. default:
  797. strValues = ConvertMSSQLDataType(dr[dc].ToString().Trim(), dc.DataType.ToString());
  798. break;
  799. }
  800. }
  801. else
  802. {
  803. switch (dc.DataType.ToString().ToUpper())
  804. {
  805. case "SYSTEM.DATETIME":
  806. strValues += "," + ConvertMSSQLDataType(DateTime.Parse(dr[dc].ToString()), dc.DataType.ToString());
  807. break;
  808. default:
  809. strValues += "," + ConvertMSSQLDataType(dr[dc].ToString().Trim(), dc.DataType.ToString());
  810. break;
  811. }
  812. }
  813. }
  814. //撰寫實體檔案
  815. if (intMaxData == 1)
  816. {
  817. //無設定最大筆數
  818. Utility.WriteFile(strPath + ".sql", string.Format("Insert Into {0} ({1}) Values ({2}) ", strTargetTable, strTargetColumns, strValues));
  819. }
  820. else
  821. {
  822. //有設定最大筆數
  823. if (strFileCount == "0")
  824. strFileCount = "";
  825. Utility.WriteFile(strPath + strFileCount + ".sql", string.Format("Insert Into {0} ({1}) Values ({2}) ", strTargetTable, strTargetColumns, strValues));
  826. }
  827. intDataCount += 1;
  828. intProgress += 1;
  829. pgsForm.pbExport.Value = intProgress; //變化Progess的狀態
  830. Application.DoEvents();
  831. strFileCount = (intDataCount / intMaxData).ToString(); //切分檔案
  832. strValues = ""; //清除已經存在的資料
  833. }
  834. //撰寫實體檔案
  835. if (intMaxData == 1)
  836. {
  837. //無設定最大筆數
  838. Utility.WriteFile(strPath + ".sql", "Go");
  839. }
  840. else
  841. {
  842. //有設定最大筆數
  843. if (strFileCount == "0")
  844. strFileCount = "";
  845. Utility.WriteFile(strPath + strFileCount + ".sql", "Go");
  846. }
  847. }
  848. }
  849. }
  850. MessageBox.Show("匯出完成");
  851. }
  852. catch (Exception ex)
  853. {
  854. MessageBox.Show("匯出失敗");
  855. ErrorHandler.WriteErrorLog("Form1.ExportToMSSQLData", ex);
  856. }
  857. finally
  858. {
  859. pgsForm.Close();
  860. }
  861. }
  862. private string ConvertMSSQLColumnType(string strSourceCol, string strTargetCol, string strType)
  863. {
  864. switch (strType.ToUpper())
  865. {
  866. case "VARCHAR":
  867. return "[" + strSourceCol + "] AS " + strTargetCol;
  868. case "VAR":
  869. return "[" + strSourceCol + "] AS " + strTargetCol;
  870. case "INT":
  871. return "[" + strSourceCol + "] AS " + strTargetCol;
  872. case "DATETIME":
  873. return "Convert(varchar,[" + strSourceCol + "],21) AS " + strTargetCol;
  874. default:
  875. return "[" + strSourceCol + "] AS " + strTargetCol;
  876. }
  877. }
  878. private string ConvertMSSQLDataType(string strData, string strType)
  879. {
  880. if (strData == "")
  881. {
  882. return "Null";
  883. }
  884. switch (strType.ToUpper())
  885. {
  886. case "STRING":
  887. return "'" + strData.ToString().Replace("'","''") + "'";
  888. case "INT32":
  889. return strData.ToString().Trim();
  890. case "DECIMAL":
  891. return strData.ToString().Trim();
  892. default:
  893. return "'" + strData.ToString().Replace("'", "''").Trim() + "'";
  894. }
  895. }
  896. private string ConvertMSSQLDataType(DateTime dtData, string strType)
  897. {
  898. return "'" + dtData.ToString("yyyy-MM-dd HH:mm:ss") + "'";
  899. }
  900. #endregion //End of MS-SQL
  901. #region PostgreSQL
  902. public DataSet GetPostgreSQLResult(string strSQL, NpgsqlConnection conn)
  903. {
  904. DataSet dsData = new DataSet();
  905. try
  906. {
  907. using (NpgsqlDataAdapter sqlAdapter = new NpgsqlDataAdapter(strSQL, conn))
  908. {
  909. if (conn.State == ConnectionState.Closed) //判斷連線狀態
  910. {
  911. conn.Open();
  912. blSourceConnStatus = true;
  913. }
  914. sqlAdapter.Fill(dsData, "Result");
  915. }
  916. return dsData;
  917. }
  918. catch (Exception ex)
  919. {
  920. throw ex;
  921. }
  922. }
  923. private DataTable ShowPostgreSQLTablesList(NpgsqlConnection sqlConn)
  924. {
  925. try
  926. {
  927. string strGetSQLTableList = "SELECT tablename FROM pg_tables where schemaname = 'public' order by tablename";
  928. return PostgreSQLUtility.GetSQLResult(strGetSQLTableList, sqlConn);
  929. }
  930. catch (Exception ex)
  931. {
  932. ErrorHandler.WriteErrorLog("Form1.ShowPostgreSQLTablesList", ex);
  933. return null;
  934. }
  935. }
  936. private DataTable ShowPostgreSQLColumnList(NpgsqlConnection sqlConn, string strTableName)
  937. {
  938. try
  939. {
  940. string strGetMSSQLColumnList = "select Column_name, data_type from information_schema.columns where table_schema='public' And table_name ='" + strTableName + "' order by ordinal_position";
  941. return PostgreSQLUtility.GetSQLResult(strGetMSSQLColumnList, sqlConn);
  942. }
  943. catch (Exception ex)
  944. {
  945. ErrorHandler.WriteErrorLog("Form1.ShowPostgreSQLColumnList", ex);
  946. return null;
  947. }
  948. }
  949. private void ExportToPostgreSQLData(string strPath, string subFileName)
  950. {
  951. ProgressForm pgsForm = new ProgressForm();
  952. int intDataCount = 0;
  953. int intMaxData = 0;
  954. int intProgress = 0;
  955. string strGenResult = "";
  956. string strSourceTable = "";
  957. string strTargetColumns = "";
  958. string strWhere = "";
  959. string strTargetTable = "";
  960. string strDeleteCommand = "";
  961. string strValues = "";
  962. string strFileCount = "";
  963. string[] strColumns = null;
  964. string[,] strColumnResults = new string[dgvExportList.Rows.Count, 2];
  965. string strSelectCommand = "";
  966. try
  967. {
  968. //命令字串處理
  969. strTargetColumns = "";
  970. //取得每個檔案最大筆數
  971. if (Int32.Parse(txtMaxCount.Text.Trim()) > 0)
  972. {
  973. intMaxData = Int32.Parse(txtMaxCount.Text.Trim());
  974. }
  975. else
  976. {
  977. intMaxData = 1;
  978. }
  979. //取得欄位對應字串陣列
  980. pgsForm.WindowState = FormWindowState.Normal;
  981. pgsForm.pbExport.Minimum = 0;
  982. pgsForm.Show();
  983. foreach (DataGridViewRow dgvRow in dgvExportList.Rows)
  984. {
  985. if (dgvRow.Cells["clExport"].Value != null && (bool)dgvRow.Cells["clExport"].Value == true)
  986. {
  987. strSelectCommand = "";
  988. strSourceTable = "";
  989. strTargetColumns = "";
  990. strDeleteCommand = "";
  991. strValues = "";
  992. DataTable dtResult = null;
  993. //取得欄位對應
  994. if (dgvRow.Cells["clMappingData"].Value != null)
  995. {
  996. strColumns = dgvRow.Cells["clMappingData"].Value.ToString().Split('|');
  997. }
  998. //取得來源Table
  999. if (dgvRow.Cells["clSourceTable"].Value != null)
  1000. {
  1001. if (dgvRow.Cells["clSourceTable"].Value.ToString().Trim() != "")
  1002. {
  1003. strSourceTable = dgvRow.Cells["clSourceTable"].Value.ToString();
  1004. }
  1005. }
  1006. //取得Where條件
  1007. if (dgvRow.Cells["clWhere"].Value != null)
  1008. {
  1009. if (dgvRow.Cells["clWhere"].Value.ToString().Trim() != "")
  1010. {
  1011. strWhere = " " + dgvRow.Cells["clWhere"].Value.ToString();
  1012. }
  1013. }
  1014. #region 產生來源資料查詢命令
  1015. strGenResult = GenExpSourceCommand(strColumns, strSourceClass, strSourceTable, strWhere);
  1016. strSelectCommand = strGenResult.Substring(0, strGenResult.IndexOf('|')).Trim();
  1017. strTargetColumns = strGenResult.Substring(strGenResult.IndexOf('|') + 1).Trim();
  1018. switch (strSourceClass)
  1019. {
  1020. case "MS-SQL":
  1021. dtResult = GetMSSQLResult(strSelectCommand, sqlMSSourceConn).Tables["Result"];
  1022. break;
  1023. case "MySQL":
  1024. dtResult = GetMySQLResult(strSelectCommand, sqlMySourceConn).Tables["Result"];
  1025. break;
  1026. case "Oracle":
  1027. dtResult = GetOracleResult(strSelectCommand, sqlOraSourceConn).Tables["Result"];
  1028. break;
  1029. case "PostgreSQL":
  1030. dtResult = GetPostgreSQLResult(strSelectCommand.ToString(), sqlPsgSourceConn).Tables["Result"];
  1031. break;
  1032. }
  1033. #endregion
  1034. //產生匯出資料語法
  1035. if (dtResult.Rows.Count > 0)
  1036. {
  1037. //Progess bar
  1038. intProgress = 0;
  1039. pgsForm.pbExport.Value = 0;
  1040. pgsForm.pbExport.Maximum = dtResult.Rows.Count;
  1041. if (dgvRow.Cells["clTargetTable"].Value != null)
  1042. {
  1043. strTargetTable = dgvRow.Cells["clTargetTable"].Value.ToString();
  1044. //strFileCount = (intDataCount / intMaxData).ToString(); //切分檔案
  1045. //撰寫實體檔案
  1046. if (intMaxData == 1)
  1047. {
  1048. //無設定最大筆數
  1049. Utility.WriteFile(strPath + ".sql", string.Format("/*======================================================={0}======================================================*/", strTargetTable));
  1050. Utility.WriteFile(strPath + ".sql", "Go");
  1051. Utility.WriteFile(strPath + ".sql", " ");
  1052. }
  1053. else
  1054. {
  1055. //有設定最大筆數
  1056. if (strFileCount == "0")
  1057. strFileCount = "";
  1058. Utility.WriteFile(strPath + strFileCount + ".sql", string.Format("/*======================================================={0}======================================================*/", strTargetTable));
  1059. Utility.WriteFile(strPath + strFileCount + ".sql", " ");
  1060. }
  1061. }
  1062. //勾選清除目標資料表
  1063. if (dgvRow.Cells["clTableDel"].Value != null && Convert.ToBoolean(dgvRow.Cells["clTableDel"].Value) == false)
  1064. {
  1065. strDeleteCommand = string.Format("Delete From \"{0}\" ;", strTargetTable);
  1066. if (dgvRow.Cells["clWhere"].Value != null)
  1067. {
  1068. if (dgvRow.Cells["clWhere"].Value.ToString().Trim() != "")
  1069. {
  1070. strDeleteCommand += "Where 1=1 And " + dgvRow.Cells["clWhere"].Value.ToString();
  1071. }
  1072. }
  1073. //撰寫實體檔案
  1074. if (intMaxData == 1)
  1075. {
  1076. //無設定最大筆數
  1077. Utility.WriteFile(strPath + ".sql", strDeleteCommand);
  1078. }
  1079. else
  1080. {
  1081. //有設定最大筆數
  1082. if (strFileCount == "0")
  1083. strFileCount = "";
  1084. Utility.WriteFile(strPath + strFileCount + ".sql", strDeleteCommand);
  1085. }
  1086. }
  1087. //處理筆數上限似資料匯出
  1088. foreach (DataRow dr in dtResult.Rows)
  1089. {
  1090. foreach (DataColumn dc in dtResult.Columns)
  1091. {
  1092. if (strValues == "")
  1093. {
  1094. switch (dc.DataType.ToString().ToUpper())
  1095. {
  1096. case "TIMESTAMP WITH TIME ZONE":
  1097. strValues = ConvertMSSQLDataType(DateTime.Parse(dr[dc].ToString()), dc.DataType.ToString());
  1098. break;
  1099. case "TIMESTAMP WITHOUT TIME ZONE":
  1100. strValues = ConvertMSSQLDataType(DateTime.Parse(dr[dc].ToString()), dc.DataType.ToString());
  1101. break;
  1102. default:
  1103. strValues = ConvertMSSQLDataType(dr[dc].ToString().Trim(), dc.DataType.ToString());
  1104. break;
  1105. }
  1106. }
  1107. else
  1108. {
  1109. switch (dc.DataType.ToString().ToUpper())
  1110. {
  1111. case "TIMESTAMP WITH TIME ZONE":
  1112. strValues += "," + ConvertMSSQLDataType(DateTime.Parse(dr[dc].ToString()), dc.DataType.ToString());
  1113. break;
  1114. case "TIMESTAMP WITHOUT TIME ZONE":
  1115. strValues += "," + ConvertMSSQLDataType(DateTime.Parse(dr[dc].ToString()), dc.DataType.ToString());
  1116. break;
  1117. default:
  1118. strValues += "," + ConvertMSSQLDataType(dr[dc].ToString().Trim(), dc.DataType.ToString());
  1119. break;
  1120. }
  1121. }
  1122. }
  1123. //撰寫實體檔案
  1124. if (intMaxData == 1)
  1125. {
  1126. //無設定最大筆數
  1127. Utility.WriteFile(strPath + ".sql", string.Format("Insert Into \"{0}\" ({1}) Values ({2}) ;", strTargetTable, strTargetColumns, strValues));
  1128. }
  1129. else
  1130. {
  1131. //有設定最大筆數
  1132. if (strFileCount == "0")
  1133. strFileCount = "";
  1134. Utility.WriteFile(strPath + strFileCount + ".sql", string.Format("Insert Into \"{0}\" ({1}) Values ({2}) ;", strTargetTable, strTargetColumns, strValues));
  1135. }
  1136. intDataCount += 1;
  1137. intProgress += 1;
  1138. pgsForm.pbExport.Value = intProgress; //變化Progess的狀態
  1139. Application.DoEvents();
  1140. strFileCount = (intDataCount / intMaxData).ToString(); //切分檔案
  1141. strValues = ""; //清除已經存在的資料
  1142. }
  1143. }
  1144. }
  1145. }
  1146. MessageBox.Show("匯出完成");
  1147. }
  1148. catch (Exception ex)
  1149. {
  1150. MessageBox.Show("匯出失敗");
  1151. ErrorHandler.WriteErrorLog("Form1.ExportToPostgreSQLData", ex);
  1152. }
  1153. finally
  1154. {
  1155. pgsForm.Close();
  1156. }
  1157. }
  1158. private string ConvertPostgreSQLColumnType(string strSourceCol, string strTargetCol, string strType)
  1159. {
  1160. switch (strType.ToUpper())
  1161. {
  1162. case "TEXT":
  1163. return strSourceCol + " AS " + strTargetCol;
  1164. case "CHARATER VARYING":
  1165. return strSourceCol + " AS " + strTargetCol;
  1166. case "DOUBLE PRECISION":
  1167. return strSourceCol + " AS " + strTargetCol;
  1168. case "BOOLEAN":
  1169. return strSourceCol + " AS " + strTargetCol;
  1170. case "BIGINT":
  1171. return strSourceCol + " AS " + strTargetCol;
  1172. case "INTEGER":
  1173. return strSourceCol + " AS " + strTargetCol;
  1174. //case "TIMESTAMP WITH TIME ZONE":
  1175. // return "to_char(" + strSourceCol + ", 'yyyy-MM-dd hh24:mm:ss')";
  1176. //case "TIMESTAMP WITHOUT TIME ZONE":
  1177. // return "to_char(" + strSourceCol + ", 'yyyy-MM-dd hh24:mm:ss')";
  1178. default:
  1179. return strSourceCol + " AS " + strTargetCol;
  1180. }
  1181. }
  1182. private string ConvertPostgreSQLDataType(string strData, string strType)
  1183. {
  1184. if (strData == "")
  1185. {
  1186. return "Null";
  1187. }
  1188. switch (strType.ToUpper())
  1189. {
  1190. case "SYSTEM.STRING":
  1191. return "'" + strData.ToString().Replace("'","''").Trim() + "'";
  1192. case "SYSTEM.INT32":
  1193. return strData.ToString().Trim();
  1194. //case "SYSTEM.DATETIME":
  1195. //return "'" + strData.ToString().Trim() + "'";
  1196. case "SYSTEM.BOOLEAN":
  1197. return strData.ToString().Trim();
  1198. default:
  1199. return "'" + strData.ToString().Replace("'", "''").Trim() + "'";
  1200. }
  1201. }
  1202. private string ConvertPostgreSQLDataType(DateTime dtData, string strType)
  1203. {
  1204. return "'" + dtData.ToString("yyyy-MM-dd HH:mm:ss") + "'";
  1205. }
  1206. #endregion //End of PostgreSQL
  1207. #region MySQL
  1208. public DataSet GetMySQLResult(string strSQL, MySqlConnection conn)
  1209. {
  1210. DataSet dsData = new DataSet();
  1211. try
  1212. {
  1213. using (MySqlDataAdapter sqlAdapter = new MySqlDataAdapter(strSQL, conn))
  1214. {
  1215. if (conn.State == ConnectionState.Closed) //判斷連線狀態
  1216. {
  1217. conn.Open();
  1218. blSourceConnStatus = true;
  1219. }
  1220. sqlAdapter.Fill(dsData, "Result");
  1221. }
  1222. return dsData;
  1223. }
  1224. catch (Exception ex)
  1225. {
  1226. throw ex;
  1227. }
  1228. }
  1229. private DataTable ShowMySQLTableList(MySqlConnection sqlConn, string strDBName)
  1230. {
  1231. try
  1232. {
  1233. DataTable dtTemp = null;
  1234. string strGetMSSQLTableList = "Show tables from " + strDBName;
  1235. dtTemp = MySQLUtility.GetSQLResult(strGetMSSQLTableList, sqlConn);
  1236. dtTemp.Columns[0].ColumnName = "TableName";
  1237. return dtTemp;
  1238. }
  1239. catch (Exception ex)
  1240. {
  1241. ErrorHandler.WriteErrorLog("Form1.ShowMySQLTableList", ex);
  1242. return null;
  1243. }
  1244. }
  1245. private DataTable ShowMySQLColumnList(MySqlConnection sqlConn, string strTableName, string strDBName)
  1246. {
  1247. try
  1248. {
  1249. string strGetMSSQLColumnList = "Show COLUMNS FROM " + strTableName + " FROM " + strDBName;
  1250. return MySQLUtility.GetSQLResult(strGetMSSQLColumnList, sqlConn);
  1251. }
  1252. catch (Exception ex)
  1253. {
  1254. ErrorHandler.WriteErrorLog("Form1.cs", ex);
  1255. return null;
  1256. }
  1257. }
  1258. private void ShowMySQLTargetColumnList(MySqlConnection sqlConn, string strTableName, string strDBName)
  1259. {
  1260. try
  1261. {
  1262. string strGetMySQLColumnList = "Show COLUMNS FROM " + strTableName + " FROM " + strDBName;
  1263. DataTable dtTemp = MySQLUtility.GetSQLResult(strGetMySQLColumnList, sqlConn);
  1264. dtTemp.Columns[0].ColumnName = "COLUMN_NAME";
  1265. this.clTargetColumn.DisplayMember = "COLUMN_NAME";
  1266. this.clTargetColumn.DataSource = dtTemp;
  1267. Application.DoEvents();
  1268. }
  1269. catch (Exception ex)
  1270. {
  1271. ErrorHandler.WriteErrorLog("Form1.ShowMySQLTargetColumnList", ex);
  1272. }
  1273. }
  1274. private void ExportToMySQLData(string strPath, string subFileName)
  1275. {
  1276. ProgressForm pgsForm = new ProgressForm();
  1277. int intDataCount = 0;
  1278. int intMaxData = 0;
  1279. int intProgress = 0;
  1280. string strGenResult = "";
  1281. string strSourceTable = "";
  1282. string strTargetColumns = "";
  1283. string strWhere = "";
  1284. string strTargetTable = "";
  1285. string strDeleteCommand = "";
  1286. string strValues = "";
  1287. string strFileCount = "";
  1288. string[] strColumns = null;
  1289. string[,] strColumnResults = new string[dgvExportList.Rows.Count, 2];
  1290. string strSelectCommand = "";
  1291. try
  1292. {
  1293. //命令字串處理
  1294. strTargetColumns = "";
  1295. //取得每個檔案最大筆數
  1296. if (Int32.Parse(txtMaxCount.Text.Trim()) > 0)
  1297. {
  1298. intMaxData = Int32.Parse(txtMaxCount.Text.Trim());
  1299. }
  1300. else
  1301. {
  1302. intMaxData = 1;
  1303. }
  1304. //取得欄位對應字串陣列
  1305. pgsForm.WindowState = FormWindowState.Normal;
  1306. pgsForm.pbExport.Minimum = 0;
  1307. pgsForm.Show();
  1308. foreach (DataGridViewRow dgvRow in dgvExportList.Rows)
  1309. {
  1310. if (dgvRow.Cells["clExport"].Value != null && (bool)dgvRow.Cells["clExport"].Value == true)
  1311. {
  1312. strSelectCommand = "";
  1313. strSourceTable = "";
  1314. strTargetColumns = "";
  1315. strDeleteCommand = "";
  1316. strValues = "";
  1317. DataTable dtResult = null;
  1318. //取得欄位對應
  1319. if (dgvRow.Cells["clMappingData"].Value != null)
  1320. {
  1321. strColumns = dgvRow.Cells["clMappingData"].Value.ToString().Split('|');
  1322. }
  1323. //取得來源Table
  1324. if (dgvRow.Cells["clSourceTable"].Value != null)
  1325. {
  1326. if (dgvRow.Cells["clSourceTable"].Value.ToString().Trim() != "")
  1327. {
  1328. strSourceTable = dgvRow.Cells["clSourceTable"].Value.ToString();
  1329. }
  1330. }
  1331. //取得目標Table
  1332. if (dgvRow.Cells["clTargetTable"].Value != null)
  1333. {
  1334. if (dgvRow.Cells["clTargetTable"].Value.ToString().Trim() != "")
  1335. {
  1336. strTargetTable = dgvRow.Cells["clTargetTable"].Value.ToString();
  1337. }
  1338. }
  1339. //取得Where條件
  1340. if (dgvRow.Cells["clWhere"].Value != null)
  1341. {
  1342. if (dgvRow.Cells["clWhere"].Value.ToString().Trim() != "")
  1343. {
  1344. strWhere = " " + dgvRow.Cells["clWhere"].Value.ToString();
  1345. }
  1346. }
  1347. #region 產生來源資料查詢命令
  1348. strGenResult = GenExpSourceCommand(strColumns, strSourceClass, strSourceTable, strWhere);
  1349. strSelectCommand = strGenResult.Substring(0, strGenResult.IndexOf('|')).Trim();
  1350. strTargetColumns = strGenResult.Substring(strGenResult.IndexOf('|') + 1).Trim();
  1351. switch (strSourceClass)
  1352. {
  1353. case "MS-SQL":
  1354. dtResult = GetMSSQLResult(strSelectCommand, sqlMSSourceConn).Tables["Result"];
  1355. break;
  1356. case "MySQL":
  1357. dtResult = GetMySQLResult(strSelectCommand, sqlMySourceConn).Tables["Result"];
  1358. break;
  1359. case "Oracle":
  1360. dtResult = GetOracleResult(strSelectCommand, sqlOraSourceConn).Tables["Result"];
  1361. break;
  1362. case "PostgreSQL":
  1363. dtResult = GetPostgreSQLResult(strSelectCommand.ToString(), sqlPsgSourceConn).Tables["Result"];
  1364. break;
  1365. }
  1366. #endregion
  1367. //產生匯出資料語法
  1368. if (dtResult.Rows.Count > 0)
  1369. {
  1370. //Progess bar
  1371. intProgress = 0;
  1372. pgsForm.pbExport.Value = 0;
  1373. pgsForm.pbExport.Maximum = dtResult.Rows.Count;
  1374. if (dgvRow.Cells["clTargetTable"].Value != null)
  1375. {
  1376. strTargetTable = dgvRow.Cells["clTargetTable"].Value.ToString();
  1377. //strFileCount = (intDataCount / intMaxData).ToString(); //切分檔案
  1378. //撰寫實體檔案
  1379. if (intMaxData == 1)
  1380. {
  1381. //無設定最大筆數
  1382. Utility.WriteFile(strPath + ".sql", string.Format("/*======================================================={0}======================================================*/", strTargetTable));
  1383. Utility.WriteFile(strPath + ".sql", string.Format("raiserror('Now Insert {0} Datas .... ', 1, 1)", strTargetTable));
  1384. Utility.WriteFile(strPath + ".sql", "Go");
  1385. Utility.WriteFile(strPath + ".sql", " ");
  1386. }
  1387. else
  1388. {
  1389. //有設定最大筆數
  1390. if (strFileCount == "0")
  1391. strFileCount = "";
  1392. Utility.WriteFile(strPath + strFileCount + ".sql", string.Format("/*======================================================={0}======================================================*/", strTargetTable));
  1393. Utility.WriteFile(strPath + strFileCount + ".sql", string.Format("raiserror('Now Insert {0} Datas .... ', 1, 1)", strTargetTable));
  1394. Utility.WriteFile(strPath + strFileCount + ".sql", "Go");
  1395. Utility.WriteFile(strPath + strFileCount + ".sql", " ");
  1396. }
  1397. }
  1398. //勾選清除目標資料表
  1399. if (dgvRow.Cells["clTableDel"].Value != null && Convert.ToBoolean(dgvRow.Cells["clTableDel"].Value) == false)
  1400. {
  1401. strDeleteCommand = string.Format("Delete From {0} ", strTargetTable);
  1402. if (dgvRow.Cells["clWhere"].Value != null)
  1403. {
  1404. if (dgvRow.Cells["clWhere"].Value.ToString().Trim() != "")
  1405. {
  1406. strDeleteCommand += "Where 1=1 And " + dgvRow.Cells["clWhere"].Value.ToString();
  1407. }
  1408. }
  1409. //撰寫實體檔案
  1410. if (intMaxData == 1)
  1411. {
  1412. //無設定最大筆數
  1413. Utility.WriteFile(strPath + ".sql", strDeleteCommand + ";");
  1414. Utility.WriteFile(strPath + ".sql", "Go");
  1415. }
  1416. else
  1417. {
  1418. //有設定最大筆數
  1419. if (strFileCount == "0")
  1420. strFileCount = "";
  1421. Utility.WriteFile(strPath + strFileCount + ".sql", strDeleteCommand + ";");
  1422. Utility.WriteFile(strPath + strFileCount + ".sql", "Go");
  1423. }
  1424. }
  1425. //處理筆數上限似資料匯出
  1426. foreach (DataRow dr in dtResult.Rows)
  1427. {
  1428. foreach (DataColumn dc in dtResult.Columns)
  1429. {
  1430. if (strValues == "")
  1431. {
  1432. strValues = ConvertMySQLDataType(dr[dc].ToString().Trim(), dc.DataType.ToString());
  1433. }
  1434. else
  1435. {
  1436. strValues += "," + ConvertMySQLDataType(dr[dc].ToString().Trim(), dc.DataType.ToString());
  1437. }
  1438. }
  1439. //撰寫實體檔案
  1440. if (intMaxData == 1)
  1441. {
  1442. //無設定最大筆數
  1443. Utility.WriteFile(strPath + ".sql", string.Format("Insert Into {0} ({1}) Values ({2}) ", strTargetTable, strTargetColumns, strValues));
  1444. }
  1445. else
  1446. {
  1447. //有設定最大筆數
  1448. if (strFileCount == "0")
  1449. strFileCount = "";
  1450. Utility.WriteFile(strPath + strFileCount + ".sql", string.Format("Insert Into {0} ({1}) Values ({2}) ", strTargetTable, strTargetColumns, strValues));
  1451. }
  1452. intDataCount += 1;
  1453. intProgress += 1;
  1454. pgsForm.pbExport.Value = intProgress; //變化Progess的狀態
  1455. Application.DoEvents();
  1456. strFileCount = (intDataCount / intMaxData).ToString(); //切分檔案
  1457. strValues = ""; //清除已經存在的資料
  1458. }
  1459. //撰寫實體檔案
  1460. if (intMaxData == 1)
  1461. {
  1462. //無設定最大筆數
  1463. Utility.WriteFile(strPath + ".sql", "Go");
  1464. }
  1465. else
  1466. {
  1467. //有設定最大筆數
  1468. if (strFileCount == "0")
  1469. strFileCount = "";
  1470. Utility.WriteFile(strPath + strFileCount + ".sql", "Go");
  1471. }
  1472. }
  1473. }
  1474. Application.DoEvents();
  1475. }
  1476. MessageBox.Show("匯出完成");
  1477. }
  1478. catch (Exception ex)
  1479. {
  1480. MessageBox.Show("匯出失敗");
  1481. ErrorHandler.WriteErrorLog("Form1.ExportToMySQLData", ex);
  1482. }
  1483. finally
  1484. {
  1485. pgsForm.Close();
  1486. }
  1487. }
  1488. private string ConvertMySQLColumnType(string strSourceCol, string strTargetCol, string strType)
  1489. {
  1490. //特殊欄位型態處理
  1491. if (strType.IndexOf("enum") != -1)
  1492. {
  1493. strType = "ENUM";
  1494. }
  1495. if (strType.IndexOf("char") != -1)
  1496. {
  1497. strType = "CHAR";
  1498. }
  1499. if (strType.IndexOf("float") != -1)
  1500. {
  1501. strType = "FLOAT";
  1502. }
  1503. switch (strType.ToUpper())
  1504. {
  1505. case "DATETIME":
  1506. return "Date_Format(" + strSourceCol + ",'%Y-%m-%d %H:%i:%s') AS " + strTargetCol;
  1507. case "TIMESTAMP":
  1508. return "Date_Format(" + strSourceCol + ",'%Y-%m-%d %H:%i:%s') AS " + strTargetCol;
  1509. default:
  1510. return strSourceCol + " AS " + strTargetCol;
  1511. }
  1512. }
  1513. private string ConvertMySQLDataType(string strData, string strType)
  1514. {
  1515. if (strData == "")
  1516. {
  1517. return "Null";
  1518. }
  1519. switch (strType.ToUpper())
  1520. {
  1521. case "STRING":
  1522. return "'" + strData.ToString().Replace("'", "''") + "'";
  1523. case "INT32":
  1524. return strData.ToString().Trim();
  1525. case "DECIMAL":
  1526. return strData.ToString().Trim();
  1527. default:
  1528. return "'" + strData.ToString().Replace("'", "''") + "'";
  1529. }
  1530. }
  1531. #endregion //End of MySQL
  1532. #region Oracle
  1533. public DataSet GetOracleResult(string strSQL, OracleConnection conn)
  1534. {
  1535. DataSet dsData = new DataSet();
  1536. try
  1537. {
  1538. using (OracleDataAdapter sqlAdapter = new OracleDataAdapter(strSQL, conn))
  1539. {
  1540. if (conn.State == ConnectionState.Closed) //判斷連線狀態
  1541. {
  1542. conn.Open();
  1543. blSourceConnStatus = true;
  1544. }
  1545. sqlAdapter.Fill(dsData, "Result");
  1546. }
  1547. return dsData;
  1548. }
  1549. catch (Exception ex)
  1550. {
  1551. throw ex;
  1552. }
  1553. }
  1554. private DataTable ShowOracleTableList(OracleConnection sqlConn , string strDBName)
  1555. {
  1556. try
  1557. {
  1558. string strGetOracleTableList = "SELECT TABLE_NAME AS TableName FROM ALL_TABLES Where OWNER Not IN ('SYS', 'XDB', 'SYSTEM', 'CTXSYS', 'MDSYS') ";
  1559. return OracleUtility.GetSQLResult(strGetOracleTableList, sqlConn);
  1560. }
  1561. catch (Exception ex)
  1562. {
  1563. ErrorHandler.WriteErrorLog("Form1.ShowOracleTableList", ex);
  1564. return null;
  1565. }
  1566. }
  1567. private DataTable ShowOracleColumnList(OracleConnection sqlConn, string strTableName)
  1568. {
  1569. try
  1570. {
  1571. string strGetOracleColumnList = "Select COLUMN_NAME,DATA_TYPE From ALL_TAB_COLUMNS Where TABLE_NAME ='" + strTableName + "' Order by COLUMN_NAME";
  1572. return OracleUtility.GetSQLResult(strGetOracleColumnList, sqlConn);
  1573. }
  1574. catch (Exception ex)
  1575. {
  1576. ErrorHandler.WriteErrorLog("Form1.ShowOracleColumnList", ex);
  1577. return null;
  1578. }
  1579. }
  1580. private void ShowOracleTargetColumnList(OracleConnection sqlConn, string strTableName)
  1581. {
  1582. try
  1583. {
  1584. string strGetOracleColumnList = "Select COLUMN_NAME From ALL_TAB_COLUMNS Where TABLE_NAME ='" + strTableName + "' Order by COLUMN_NAME";
  1585. this.clTargetColumn.DisplayMember = "COLUMN_NAME";
  1586. this.clTargetColumn.DataSource = OracleUtility.GetSQLResult(strGetOracleColumnList, sqlConn);
  1587. Application.DoEvents();
  1588. }
  1589. catch (Exception ex)
  1590. {
  1591. ErrorHandler.WriteErrorLog("Form1.ShowOracleTargetColumnList", ex);
  1592. }
  1593. }
  1594. private void ExportToOracleData(string strPath, string subFileName)
  1595. {
  1596. ProgressForm pgsForm = new ProgressForm();
  1597. int intDataCount = 0;
  1598. int intMaxData = 0;
  1599. int intProgress = 0;
  1600. string strGenResult = "";
  1601. string strSourceTable = "";
  1602. string strTargetColumns = "";
  1603. string strWhere = "";
  1604. string strTargetTable = "";
  1605. string strDeleteCommand = "";
  1606. string strValues = "";
  1607. string strFileCount = "";
  1608. string[] strColumns = null;
  1609. string[,] strColumnResults = new string[dgvExportList.Rows.Count, 2];
  1610. string strSelectCommand = "";
  1611. try
  1612. {
  1613. //命令字串處理
  1614. strTargetColumns = "";
  1615. //取得每個檔案最大筆數
  1616. if (Int32.Parse(txtMaxCount.Text.Trim()) > 0)
  1617. {
  1618. intMaxData = Int32.Parse(txtMaxCount.Text.Trim());
  1619. }
  1620. else
  1621. {
  1622. intMaxData = 1;
  1623. }
  1624. //取得欄位對應字串陣列
  1625. pgsForm.WindowState = FormWindowState.Normal;
  1626. pgsForm.pbExport.Minimum = 0;
  1627. pgsForm.Show();
  1628. foreach (DataGridViewRow dgvRow in dgvExportList.Rows)
  1629. {
  1630. if (dgvRow.Cells["clExport"].Value != null && (bool)dgvRow.Cells["clExport"].Value == true)
  1631. {
  1632. strSelectCommand = "";
  1633. strSourceTable = "";
  1634. strTargetColumns = "";
  1635. strDeleteCommand = "";
  1636. strValues = "";
  1637. DataTable dtResult = null;
  1638. //取得欄位對應
  1639. if (dgvRow.Cells["clMappingData"].Value != null)
  1640. {
  1641. strColumns = dgvRow.Cells["clMappingData"].Value.ToString().Split('|');
  1642. }
  1643. //取得來源Table
  1644. if (dgvRow.Cells["clSourceTable"].Value != null)
  1645. {
  1646. if (dgvRow.Cells["clSourceTable"].Value.ToString().Trim() != "")
  1647. {
  1648. strSourceTable = dgvRow.Cells["clSourceTable"].Value.ToString();
  1649. }
  1650. }
  1651. //取得目標Table
  1652. if (dgvRow.Cells["clTargetTable"].Value != null)
  1653. {
  1654. if (dgvRow.Cells["clTargetTable"].Value.ToString().Trim() != "")
  1655. {
  1656. strTargetTable = dgvRow.Cells["clTargetTable"].Value.ToString();
  1657. }
  1658. }
  1659. //取得Where條件
  1660. if (dgvRow.Cells["clWhere"].Value != null)
  1661. {
  1662. if (dgvRow.Cells["clWhere"].Value.ToString().Trim() != "")
  1663. {
  1664. strWhere = " " + dgvRow.Cells["clWhere"].Value.ToString();
  1665. }
  1666. }
  1667. #region 產生來源資料查詢命令
  1668. strGenResult = GenExpSourceCommand(strColumns, strSourceClass, strSourceTable, strWhere);
  1669. strSelectCommand = strGenResult.Substring(0, strGenResult.IndexOf('|')).Trim();
  1670. strTargetColumns = strGenResult.Substring(strGenResult.IndexOf('|') + 1).Trim();
  1671. switch (strSourceClass)
  1672. {
  1673. case "MS-SQL":
  1674. dtResult = GetMSSQLResult(strSelectCommand, sqlMSSourceConn).Tables["Result"];
  1675. break;
  1676. case "MySQL":
  1677. dtResult = GetMySQLResult(strSelectCommand, sqlMySourceConn).Tables["Result"];
  1678. break;
  1679. case "Oracle":
  1680. dtResult = GetOracleResult(strSelectCommand, sqlOraSourceConn).Tables["Result"];
  1681. break;
  1682. case "PostgreSQL":
  1683. dtResult = GetPostgreSQLResult(strSelectCommand.ToString(), sqlPsgSourceConn).Tables["Result"];
  1684. break;
  1685. }
  1686. #endregion
  1687. //產生匯出資料語法
  1688. if (dtResult.Rows.Count > 0)
  1689. {
  1690. //Progess bar
  1691. intProgress = 0;
  1692. pgsForm.pbExport.Value = 0;
  1693. pgsForm.pbExport.Maximum = dtResult.Rows.Count;
  1694. if (dgvRow.Cells["clTargetTable"].Value != null)
  1695. {
  1696. strTargetTable = dgvRow.Cells["clTargetTable"].Value.ToString();
  1697. //撰寫實體檔案
  1698. if (intMaxData == 1)
  1699. {
  1700. //無設定最大筆數
  1701. Utility.WriteFile(strPath + ".sql", string.Format("/*======================================================={0}======================================================*/", strTargetTable));
  1702. Utility.WriteFile(strPath + ".sql", " ");
  1703. }
  1704. else
  1705. {
  1706. //有設定最大筆數
  1707. if (strFileCount == "0")
  1708. strFileCount = "";
  1709. Utility.WriteFile(strPath + strFileCount + ".sql", string.Format("/*======================================================={0}======================================================*/", strTargetTable));
  1710. Utility.WriteFile(strPath + strFileCount + ".sql", " ");
  1711. }
  1712. }
  1713. //勾選清除目標資料表
  1714. if (dgvRow.Cells["clTableDel"].Value != null && Convert.ToBoolean(dgvRow.Cells["clTableDel"].Value) == false)
  1715. {
  1716. strDeleteCommand = string.Format("Delete From {0} ", strTargetTable);
  1717. if (dgvRow.Cells["clWhere"].Value != null)
  1718. {
  1719. if (dgvRow.Cells["clWhere"].Value.ToString().Trim() != "")
  1720. {
  1721. strDeleteCommand += "Where 1=1 And " + dgvRow.Cells["clWhere"].Value.ToString();
  1722. }
  1723. }
  1724. //撰寫實體檔案
  1725. if (intMaxData == 1)
  1726. {
  1727. //無設定最大筆數
  1728. Utility.WriteFile(strPath + ".sql", strDeleteCommand + ";");
  1729. }
  1730. else
  1731. {
  1732. //有設定最大筆數
  1733. if (strFileCount == "0")
  1734. strFileCount = "";
  1735. Utility.WriteFile(strPath + strFileCount + ".sql", strDeleteCommand + ";");
  1736. }
  1737. }
  1738. //處理筆數上限似資料匯出
  1739. foreach (DataRow dr in dtResult.Rows)
  1740. {
  1741. foreach (DataColumn dc in dtResult.Columns)
  1742. {
  1743. if (strValues == "")
  1744. {
  1745. switch (dc.DataType.ToString().ToUpper())
  1746. {
  1747. case "SYSTEM.DATETIME":
  1748. strValues = ConvertOracleDataType(DateTime.Parse(dr[dc].ToString()), dc.DataType.ToString());
  1749. break;
  1750. default:
  1751. strValues = ConvertOracleDataType(dr[dc].ToString().Trim(), dc.DataType.ToString());
  1752. break;
  1753. }
  1754. }
  1755. else
  1756. {
  1757. switch (dc.DataType.ToString().ToUpper())
  1758. {
  1759. case "SYSTEM.DATETIME":
  1760. strValues += "," + ConvertOracleDataType(DateTime.Parse(dr[dc].ToString()), dc.DataType.ToString());
  1761. break;
  1762. default:
  1763. strValues += "," + ConvertOracleDataType(dr[dc].ToString().Trim(), dc.DataType.ToString());
  1764. break;
  1765. }
  1766. }
  1767. }
  1768. //撰寫實體檔案
  1769. if (intMaxData == 1)
  1770. {
  1771. //無設定最大筆數
  1772. Utility.WriteFile(strPath + ".sql", string.Format("Insert Into {0} ({1}) Values ({2}) ;", strTargetTable, strTargetColumns, strValues));
  1773. }
  1774. else
  1775. {
  1776. //有設定最大筆數
  1777. if (strFileCount == "0")
  1778. strFileCount = "";
  1779. Utility.WriteFile(strPath + strFileCount + ".sql", string.Format("Insert Into {0} ({1}) Values ({2}) ;", strTargetTable, strTargetColumns, strValues));
  1780. }
  1781. intDataCount += 1;
  1782. intProgress += 1;
  1783. pgsForm.pbExport.Value = intProgress; //變化Progess的狀態
  1784. Application.DoEvents();
  1785. strFileCount = (intDataCount / intMaxData).ToString(); //切分檔案
  1786. strValues = ""; //清除已經存在的資料
  1787. }
  1788. //撰寫實體檔案
  1789. if (intMaxData != 1)
  1790. {
  1791. //有設定最大筆數
  1792. if (strFileCount == "0")
  1793. strFileCount = "";
  1794. }
  1795. }
  1796. }
  1797. }
  1798. MessageBox.Show("匯出完成");
  1799. }
  1800. catch (Exception ex)
  1801. {
  1802. MessageBox.Show("匯出失敗");
  1803. ErrorHandler.WriteErrorLog("Form1.ExportToMSSQLData", ex);
  1804. }
  1805. finally
  1806. {
  1807. pgsForm.Close();
  1808. }
  1809. }
  1810. private string ConvertOracleColumnType(string strSourceCol, string strTargetCol, string strType)
  1811. {
  1812. return strSourceCol + " AS " + strTargetCol;
  1813. //switch (strType.ToUpper())
  1814. //{
  1815. // case "VARCHAR2":
  1816. // return strSourceCol + " AS " + strTargetCol;
  1817. // case "NUMBER":
  1818. // return strSourceCol + " AS " + strTargetCol;
  1819. // case "FLOAT":
  1820. // return strSourceCol + " AS " + strTargetCol;
  1821. // case "INT":
  1822. // return strSourceCol + " AS " + strTargetCol;
  1823. // case "TIMESTAMP(0)":
  1824. // return strSourceCol + " AS " + strTargetCol;
  1825. // case "TIMESTAMP":
  1826. // return strSourceCol + " AS " + strTargetCol;
  1827. // default:
  1828. // return strSourceCol + " AS " + strTargetCol;
  1829. //}
  1830. }
  1831. private string ConvertOracleDataType(string strData, string strType)
  1832. {
  1833. if (strData == "")
  1834. {
  1835. return "Null";
  1836. }
  1837. switch (strType.ToUpper())
  1838. {
  1839. case "SYSTEM.STRING":
  1840. return "'" + strData.ToString().Replace("'","''") + "'";
  1841. case "SYSTEM.DECIMAL":
  1842. return strData.ToString().Trim();
  1843. default:
  1844. return "'" + strData.ToString().Replace("'", "''") + "'";
  1845. }
  1846. }
  1847. private string ConvertOracleDataType(DateTime dtData, string strType)
  1848. {
  1849. return "TO_TIMESTAMP('" + dtData.ToString("yyyy-MM-dd HH:mm:ss") + "', 'YYYY-MM-DD HH24:MI:SS')";
  1850. }
  1851. #endregion //End of Oracle
  1852. private string CheckSource()
  1853. {
  1854. try
  1855. {
  1856. string strResult = "";
  1857. if (cbSourceClass.SelectedIndex <= 0)
  1858. {
  1859. strResult = "請選擇來源資料庫類別";
  1860. cbSourceClass.Focus();
  1861. return strResult;
  1862. }
  1863. else
  1864. {
  1865. if (txtSourceIP.Text.Trim() == "")
  1866. {
  1867. strResult = "來源資料庫IP為必填";
  1868. txtSourceIP.Focus();
  1869. return strResult;
  1870. }
  1871. if (txtSourceDBName.Text.Trim() == "")
  1872. {
  1873. strResult = "來源資料庫名稱為必填";
  1874. txtSourceDBName.Focus();
  1875. return strResult;
  1876. }
  1877. if (txtSourceID.Text.Trim() == "")
  1878. {
  1879. strResult = "來源資料庫帳號為必填";
  1880. txtSourceID.Focus();
  1881. return strResult;
  1882. }
  1883. }
  1884. return strResult;
  1885. }
  1886. catch (Exception ex)
  1887. {
  1888. ErrorHandler.WriteErrorLog("Form1.CheckSource", ex);
  1889. return "發生不明錯誤!";
  1890. }
  1891. }
  1892. private string CheckTarget()
  1893. {
  1894. try
  1895. {
  1896. string strResult = "";
  1897. if (cbTargetClass.SelectedIndex <= 0)
  1898. {
  1899. strResult = "請選擇目標資料庫類別";
  1900. cbTargetClass.Focus();
  1901. return strResult;
  1902. }
  1903. else
  1904. {
  1905. if (txtTargetIP.Text.Trim() == "")
  1906. {
  1907. strResult = "目標資料庫IP為必填";
  1908. txtTargetIP.Focus();
  1909. return strResult;
  1910. }
  1911. if (txtTargetDBName.Text.Trim() == "")
  1912. {
  1913. strResult = "目標資料庫名稱為必填";
  1914. txtTargetDBName.Focus();
  1915. return strResult;
  1916. }
  1917. if (txtTargetID.Text.Trim() == "")
  1918. {
  1919. strResult = "目標資料庫帳號為必填";
  1920. txtTargetID.Focus();
  1921. return strResult;
  1922. }
  1923. }
  1924. return strResult;
  1925. }
  1926. catch (Exception ex)
  1927. {
  1928. ErrorHandler.WriteErrorLog("Form1.CheckTarget", ex);
  1929. return "發生不明錯誤!";
  1930. }
  1931. }
  1932. private void LockSourceForm()
  1933. {
  1934. try
  1935. {
  1936. cbSourceClass.Enabled = false;
  1937. txtSourceIP.Enabled = false;
  1938. txtSourcePort.Enabled = false;
  1939. txtSourceID.Enabled = false;
  1940. txtSourceDBName.Enabled = false;
  1941. txtSourcePWD.Enabled = false;
  1942. btnExportXML.Enabled = true;
  1943. btnImportXML.Enabled = true;
  1944. btnSourceConnTest.Text = "連線中…";
  1945. //dgvExportList.Columns["clSourceTable"].DataPropertyName = "TableName";
  1946. }
  1947. catch (Exception ex)
  1948. {
  1949. ErrorHandler.WriteErrorLog("Form1.LockSourceForm", ex);
  1950. }
  1951. }
  1952. private void UnLockSourceForm()
  1953. {
  1954. try
  1955. {
  1956. cbSourceClass.Enabled = true;
  1957. txtSourceIP.Enabled = true;
  1958. txtSourcePort.Enabled = true;
  1959. txtSourceID.Enabled = true;
  1960. txtSourceDBName.Enabled = true;
  1961. txtSourcePWD.Enabled = true;
  1962. btnExportXML.Enabled = false;
  1963. btnImportXML.Enabled = false;
  1964. btnSourceConnTest.Text = "建立來源連線";
  1965. Application.DoEvents();
  1966. }
  1967. catch (Exception ex)
  1968. {
  1969. ErrorHandler.WriteErrorLog("Form1.UnLockSourceForm", ex);
  1970. }
  1971. }
  1972. private void LockTargetForm()
  1973. {
  1974. try
  1975. {
  1976. cbTargetClass.Enabled = false;
  1977. cbTargetTable.Enabled = true;
  1978. cbTargetTable.ValueMember = "TableName";
  1979. cbTargetTable.DisplayMember = "TableName";
  1980. cbTargetTable.SelectedIndex = -1;
  1981. txtTargetIP.Enabled = false;
  1982. txtTargetPort.Enabled = false;
  1983. txtTargetID.Enabled = false;
  1984. txtTargetDBName.Enabled = false;
  1985. txtTargetPWD.Enabled = false;
  1986. btnTargetConnTest.Text = "連線中…";
  1987. }
  1988. catch (Exception ex)
  1989. {
  1990. ErrorHandler.WriteErrorLog("Form1.LockTargetForm", ex);
  1991. }
  1992. }
  1993. private void UnLockTargetForm()
  1994. {
  1995. try
  1996. {
  1997. cbTargetClass.Enabled = true;
  1998. cbTargetTable.DataSource = null;
  1999. cbTargetTable.ValueMember = "TableName";
  2000. cbTargetTable.DisplayMember = "TableName";
  2001. cbTargetTable.Enabled = false;
  2002. txtTargetIP.Enabled = true;
  2003. txtTargetPort.Enabled = true;
  2004. txtTargetID.Enabled = true;
  2005. txtTargetDBName.Enabled = true;
  2006. txtTargetPWD.Enabled = true;
  2007. btnTargetConnTest.Text = "建立目標連線";
  2008. }
  2009. catch (Exception ex)
  2010. {
  2011. ErrorHandler.WriteErrorLog("Form1.UnLockTargetForm", ex);
  2012. }
  2013. }
  2014. private string GenMappingColumn()
  2015. {
  2016. string strExportColumns = "";
  2017. string strSourceColumn = "";
  2018. string strTargetColumn = "";
  2019. string strSourceColType = "";
  2020. try
  2021. {
  2022. //預設所有欄位均匯出
  2023. foreach (DataGridViewRow dgRow in dgvColumnMapping.Rows)
  2024. {
  2025. //處理下拉欄位空白的問題
  2026. if (dgRow.Cells["clExpColumn"].Value != null)
  2027. {
  2028. if ((bool)dgRow.Cells["clExpColumn"].Value == true)
  2029. {
  2030. if (dgRow.Cells["clSourceColumn"].Value == null)
  2031. {
  2032. strSourceColumn = " ";
  2033. }
  2034. else
  2035. {
  2036. strSourceColumn = dgRow.Cells["clSourceColumn"].Value.ToString();
  2037. }
  2038. if (dgRow.Cells["clType"].Value == null)
  2039. {
  2040. strSourceColType = " ";
  2041. }
  2042. else
  2043. {
  2044. strSourceColType = dgRow.Cells["clType"].Value.ToString();
  2045. }
  2046. if (dgRow.Cells["clTargetColumn"].Value == null)
  2047. {
  2048. strTargetColumn = " ";
  2049. }
  2050. else
  2051. {
  2052. strTargetColumn = dgRow.Cells["clTargetColumn"].Value.ToString();
  2053. }
  2054. if (strExportColumns == "")
  2055. {
  2056. strExportColumns += strSourceColumn + "," + strSourceColType + ";" + strTargetColumn;
  2057. }
  2058. else
  2059. {
  2060. strExportColumns += "|" + strSourceColumn + "," + strSourceColType + ";" + strTargetColumn;
  2061. }
  2062. }
  2063. }
  2064. }
  2065. return strExportColumns;
  2066. }
  2067. catch (Exception ex)
  2068. {
  2069. ErrorHandler.WriteErrorLog("Form1.GenMappingColumn", ex);
  2070. return null;
  2071. }
  2072. }
  2073. private void LocatedTarget(int intRowIndex)
  2074. {
  2075. DataTable dtResult = null;
  2076. try
  2077. {
  2078. if (cbTargetClass.SelectedIndex >= 0 && cbTargetClass.Enabled == false)
  2079. {
  2080. string strTarget = "";
  2081. string[] strColumnMapping = null;
  2082. if (intRowIndex != -1)
  2083. {
  2084. intExportIndex = intRowIndex;
  2085. //設定目標Table下拉式選單的內容
  2086. if (dgvExportList.Rows[intRowIndex].Cells["clTargetTable"].Value != null && dgvExportList.Rows[intRowIndex].Cells["clTargetTable"].Value.ToString() != "")
  2087. {
  2088. strTarget = dgvExportList.Rows[intRowIndex].Cells["clTargetTable"].Value.ToString();
  2089. }
  2090. else
  2091. {
  2092. strTarget = dgvExportList.Rows[intRowIndex].Cells["clSourceTable"].Value.ToString();
  2093. }
  2094. cbTargetTable.SelectedValue = strTarget;
  2095. //取得欄位對應字串陣列
  2096. if (dgvExportList.Rows[intRowIndex].Cells["clMappingData"].Value != null)
  2097. {
  2098. strColumnMapping = dgvExportList.Rows[intRowIndex].Cells["clMappingData"].Value.ToString().Split('|');
  2099. }
  2100. //顯示欄位對應表的內容
  2101. if (!cbTargetClass.Enabled)
  2102. {
  2103. switch (strSourceClass)
  2104. {
  2105. case "MS-SQL":
  2106. dtResult = ShowMSSQLColumnList(sqlMSSourceConn, strTarget.ToString());
  2107. Application.DoEvents();
  2108. break;
  2109. case "MySQL":
  2110. dtResult = ShowMySQLColumnList(sqlMySourceConn, strTarget.ToString(), txtSourceDBName.Text.Trim());
  2111. dtResult.Columns[0].ColumnName = "COLUMN_NAME";
  2112. dtResult.Columns[1].ColumnName = "DATA_TYPE";
  2113. dtResult.Columns.Remove("Null");
  2114. dtResult.Columns.Remove("Key");
  2115. dtResult.Columns.Remove("Default");
  2116. dtResult.Columns.Remove("Extra");
  2117. Application.DoEvents();
  2118. break;
  2119. case "Oracle":
  2120. dtResult = ShowOracleColumnList(sqlOraSourceConn, strTarget.ToString());
  2121. Application.DoEvents();
  2122. break;
  2123. case "PostgreSQL":
  2124. dtResult = ShowPostgreSQLColumnList(sqlPsgSourceConn, strTarget.ToString());
  2125. Application.DoEvents();
  2126. break;
  2127. }
  2128. dgvColumnMapping.DataSource = dtResult;
  2129. }
  2130. if (strColumnMapping != null)
  2131. {
  2132. string strSourceColumn = "";
  2133. string strTargetColumn = "";
  2134. foreach (string strColumn in strColumnMapping)
  2135. {
  2136. strSourceColumn = strColumn.Substring(0, strColumn.IndexOf(',')).Trim();
  2137. strTargetColumn = strColumn.Substring(strColumn.IndexOf(',') + 1).Trim();
  2138. foreach (DataGridViewRow dgvRow in dgvColumnMapping.Rows)
  2139. {
  2140. if (dgvRow.Cells["clSourceColumn"].Value.ToString() == strSourceColumn)
  2141. {
  2142. dgvRow.Cells[0].Value = true;
  2143. }
  2144. }
  2145. }
  2146. }
  2147. else
  2148. {
  2149. //預設所有欄位均匯出
  2150. foreach (DataGridViewRow dgRow in dgvColumnMapping.Rows)
  2151. {
  2152. ((DataGridViewCheckBoxCell)dgRow.Cells["clExpColumn"]).Value = true;
  2153. }
  2154. }
  2155. //設定Where條件
  2156. if (dgvExportList.Rows[intRowIndex].Cells["clWhere"].Value != null)
  2157. {
  2158. txtWhere.Text = dgvExportList.Rows[intRowIndex].Cells["clWhere"].Value.ToString();
  2159. }
  2160. else
  2161. {
  2162. txtWhere.Text = "";
  2163. }
  2164. }
  2165. }
  2166. }
  2167. catch (Exception ex)
  2168. {
  2169. ErrorHandler.WriteErrorLog("Form1.LocatedTarget", ex);
  2170. }
  2171. }
  2172. private void CleanExpRow(DataGridView senderGrid, int intRowIndex)
  2173. {
  2174. try
  2175. {
  2176. senderGrid.Rows[intRowIndex].Cells["clExport"].Value = false;
  2177. senderGrid.Rows[intRowIndex].Cells["clTargetTable"].Value = "";
  2178. senderGrid.Rows[intRowIndex].Cells["clTableDel"].Value = false;
  2179. senderGrid.Rows[intRowIndex].Cells["clWhere"].Value = "";
  2180. senderGrid.Rows[intRowIndex].Cells["clMappingData"].Value = "";
  2181. //CleanRows(senderGrid, intRowIndex);
  2182. txtWhere.Text = "";
  2183. Application.DoEvents();
  2184. }
  2185. catch (Exception ex)
  2186. {
  2187. ErrorHandler.WriteErrorLog("Form1.CleanExpRow", ex);
  2188. }
  2189. }
  2190. private void ShowRow(DataGridView senderGrid, int intRowIndex)
  2191. {
  2192. try
  2193. {
  2194. DataTable dtResult = null;
  2195. string strTableName = senderGrid.Rows[intRowIndex].Cells["clSourceTable"].Value.ToString();
  2196. switch (strSourceClass)
  2197. {
  2198. case "MS-SQL":
  2199. dtResult = MSSQLUtility.GetTable(strTableName, 200, sqlMSSourceConn);
  2200. break;
  2201. case "MySQL":
  2202. dtResult = MySQLUtility.GetTable(strTableName, 200, sqlMySourceConn);
  2203. break;
  2204. case "Oracle":
  2205. dtResult = OracleUtility.GetTable(strTableName, 200, sqlOraSourceConn);
  2206. break;
  2207. case "PostgreSQL":
  2208. dtResult = PostgreSQLUtility.GetTable(strTableName, 200, sqlPsgSourceConn);
  2209. break;
  2210. }
  2211. ShowForm ResultForm = new ShowForm();
  2212. ResultForm.WindowState = FormWindowState.Normal;
  2213. ResultForm.dgvShowResult.DataSource = dtResult;
  2214. ResultForm.ShowDialog();
  2215. Application.DoEvents();
  2216. }
  2217. catch (Exception ex)
  2218. {
  2219. ErrorHandler.WriteErrorLog("Form1.ShowRow", ex);
  2220. }
  2221. }
  2222. private void CleanRows(DataGridView senderGrid)
  2223. {
  2224. if (senderGrid.DataSource != null)
  2225. {
  2226. DataTable CleanTable = (DataTable)senderGrid.DataSource;
  2227. CleanTable.Rows.Clear();
  2228. senderGrid.DataSource = CleanTable;
  2229. CleanTable.Dispose();
  2230. }
  2231. }
  2232. private void EnableExport()
  2233. {
  2234. if (blSourceConnStatus == true && blTargetConnStatus == true)
  2235. {
  2236. btnExport.Enabled = true;
  2237. btnMapping.Enabled = true;
  2238. }
  2239. }
  2240. private string GenExpSourceCommand(string[] strColumns, string strSourceClass, string strSourceTable, string strWhere)
  2241. {
  2242. string strSourceColumns = "";
  2243. string strSourceCol = "";
  2244. string strSourceType = "";
  2245. string strTargetColumns = "";
  2246. string strTargetCol = "";
  2247. string[,] strColumnResults = new string[dgvExportList.Rows.Count, 2];
  2248. string strSelectCommand = "";
  2249. //命令字串處理
  2250. strSourceColumns = "";
  2251. strTargetColumns = "";
  2252. try
  2253. {
  2254. foreach (string RowData in strColumns)
  2255. {
  2256. strSourceCol = RowData.Substring(0, RowData.IndexOf(',')).Trim();
  2257. strSourceType = RowData.Substring(RowData.IndexOf(',') + 1, RowData.IndexOf(';') - 1 - RowData.IndexOf(',')).Trim();
  2258. strTargetCol = RowData.Substring(RowData.IndexOf(';') + 1).Trim();
  2259. #region 處理查詢欄位格式
  2260. switch (strSourceClass)
  2261. {
  2262. case "MS-SQL":
  2263. if (strTargetCol == "")
  2264. {
  2265. strTargetCol = strSourceCol;
  2266. }
  2267. if (strSourceColumns == "")
  2268. {
  2269. strSourceColumns += ConvertMSSQLColumnType(strSourceCol, strTargetCol, strSourceType);
  2270. strTargetColumns += "[" + strTargetCol + "]";
  2271. }
  2272. else
  2273. {
  2274. strSourceColumns += "," + ConvertMSSQLColumnType(strSourceCol, strTargetCol, strSourceType);
  2275. strTargetColumns += ",[" + strTargetCol + "]";
  2276. }
  2277. break;
  2278. case "MySQL":
  2279. if (strTargetCol == "")
  2280. {
  2281. strTargetCol = strSourceCol;
  2282. }
  2283. if (strSourceColumns == "")
  2284. {
  2285. strSourceColumns += ConvertMySQLColumnType(strSourceCol, strTargetCol, strSourceType);
  2286. strTargetColumns += strTargetCol ;
  2287. }
  2288. else
  2289. {
  2290. strSourceColumns += "," + ConvertMySQLColumnType(strSourceCol, strTargetCol, strSourceType);
  2291. strTargetColumns += "," + strTargetCol ;
  2292. }
  2293. break;
  2294. case "Oracle":
  2295. if (strTargetCol == "")
  2296. {
  2297. strTargetCol = strSourceCol;
  2298. }
  2299. if (strSourceColumns == "")
  2300. {
  2301. strSourceColumns += ConvertOracleColumnType(strSourceCol, strTargetCol, strSourceType);
  2302. strTargetColumns += strTargetCol;
  2303. }
  2304. else
  2305. {
  2306. strSourceColumns += "," + ConvertOracleColumnType(strSourceCol, strTargetCol, strSourceType);
  2307. strTargetColumns += "," + strTargetCol;
  2308. }
  2309. break;
  2310. case "PostgreSQL":
  2311. if (strTargetCol == "")
  2312. {
  2313. strTargetCol = strSourceCol;
  2314. }
  2315. if (strSourceColumns == "")
  2316. {
  2317. strSourceColumns += ConvertPostgreSQLColumnType(strSourceCol, strTargetCol, strSourceType);
  2318. strTargetColumns += strTargetCol;
  2319. }
  2320. else
  2321. {
  2322. strSourceColumns += "," + ConvertPostgreSQLColumnType(strSourceCol, strTargetCol, strSourceType);
  2323. strTargetColumns += "," + strTargetCol;
  2324. }
  2325. break;
  2326. }
  2327. #endregion
  2328. }
  2329. switch (strSourceClass)
  2330. {
  2331. case "MS-SQL":
  2332. if (strSourceTable != "")
  2333. {
  2334. strSelectCommand += string.Format("Select {0} From {1} ", strSourceColumns, strSourceTable);
  2335. }
  2336. if (strWhere.Trim() != "")
  2337. {
  2338. strSelectCommand += "Where 1=1 And " + strWhere.Trim();
  2339. }
  2340. break;
  2341. case "MySQL":
  2342. if (strSourceTable != "")
  2343. {
  2344. strSelectCommand += string.Format("Select {0} From {1} ", strSourceColumns, strSourceTable);
  2345. }
  2346. if (strWhere.Trim() != "")
  2347. {
  2348. strSelectCommand += "Where 1=1 And " + strWhere.Trim();
  2349. }
  2350. break;
  2351. case "Oracle":
  2352. if (strSourceTable != "")
  2353. {
  2354. strSelectCommand += string.Format("Select {0} From {1} ", strSourceColumns, strSourceTable);
  2355. }
  2356. if (strWhere.Trim() != "")
  2357. {
  2358. strSelectCommand += "Where 1=1 And " + strWhere.Trim();
  2359. }
  2360. break;
  2361. case "PostgreSQL":
  2362. if (strSourceTable != "")
  2363. {
  2364. strSelectCommand += string.Format("Select {0} From \"{1}\" ", strSourceColumns, strSourceTable);
  2365. }
  2366. if (strWhere.Trim() != "")
  2367. {
  2368. strSelectCommand += "Where 1=1 And " + strWhere.Trim();
  2369. }
  2370. break;
  2371. }
  2372. return strSelectCommand +"|" + strTargetColumns;
  2373. }
  2374. catch (Exception ex)
  2375. {
  2376. ErrorHandler.WriteErrorLog("Form1.GenExpSourceCommand", ex);
  2377. return "";
  2378. }
  2379. }
  2380. #endregion
  2381. }
  2382. }