OdbcDataConnection.DesignExt.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Data;
  5. using System.Data.Common;
  6. using System.Data.Odbc;
  7. using FastReport.Utils;
  8. using FastReport.Forms;
  9. using FastReport.Data.ConnectionEditors;
  10. using System.Windows.Forms;
  11. namespace FastReport.Data
  12. {
  13. partial class OdbcDataConnection
  14. {
  15. private void GetDBObjectNames(string name, List<string> list)
  16. {
  17. DataTable schema = null;
  18. DbConnection conn = GetConnection();
  19. try
  20. {
  21. using (OdbcCommandBuilder builder = new OdbcCommandBuilder())
  22. {
  23. OpenConnection(conn);
  24. schema = conn.GetSchema("Tables");
  25. foreach (DataRow row in schema.Rows)
  26. {
  27. string tableType = GetTableType(row);
  28. if (String.Compare(tableType, name) == 0)
  29. {
  30. string tableName = GetTableName(row);
  31. string schemaName = "";
  32. if (schema.Columns.IndexOf("TABLE_SCHEM") != -1)
  33. schemaName = row["TABLE_SCHEM"].ToString();
  34. if (String.IsNullOrEmpty(schemaName))
  35. list.Add(tableName);
  36. else
  37. list.Add(schemaName + "." + builder.QuoteIdentifier(tableName, conn as OdbcConnection));
  38. }
  39. }
  40. }
  41. }
  42. catch(Exception ex)
  43. {
  44. }
  45. finally
  46. {
  47. DisposeConnection(conn);
  48. }
  49. }
  50. private string GetTableType(DataRow row)
  51. {
  52. if (row.Table.Columns.Contains("TABLE_TYPE"))
  53. return row["TABLE_TYPE"].ToString();
  54. for(int i = 0; i < row.Table.Columns.Count; i++)
  55. {
  56. if (row.Table.Columns[i].ColumnName.ToLower().Contains("type"))
  57. return row[i].ToString();
  58. }
  59. return string.Empty;
  60. }
  61. private string GetTableName(DataRow row)
  62. {
  63. if (row.Table.Columns.Contains("TABLE_NAME"))
  64. return row["TABLE_NAME"].ToString();
  65. for (int i = 0; i < row.Table.Columns.Count; i++)
  66. {
  67. if (row.Table.Columns[i].ColumnName.ToLower().Contains("table") && row.Table.Columns[i].ColumnName.ToLower().Contains("name"))
  68. return row[i].ToString();
  69. }
  70. return string.Empty;
  71. }
  72. /// <inheritdoc/>
  73. public override string[] GetTableNames()
  74. {
  75. List<string> list = new List<string>();
  76. GetDBObjectNames("TABLE", list);
  77. GetDBObjectNames("SYSTEM TABLE", list);
  78. GetDBObjectNames("VIEW", list);
  79. return list.ToArray();
  80. }
  81. /// <inheritdoc/>
  82. public override int GetDefaultParameterType()
  83. {
  84. return (int)OdbcType.VarChar;
  85. }
  86. /// <inheritdoc/>
  87. public override ConnectionEditorBase GetEditor()
  88. {
  89. return new OdbcConnectionEditor();
  90. }
  91. /// <inheritdoc/>
  92. public override string GetConnectionId()
  93. {
  94. return "ODBC: " + ConnectionString;
  95. }
  96. }
  97. }