OleDbConnectionEditor.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. using System;
  2. using System.Runtime.InteropServices;
  3. using System.Runtime.CompilerServices;
  4. using System.Reflection;
  5. using System.Windows.Forms;
  6. using FastReport.Utils;
  7. namespace FastReport.Data.ConnectionEditors
  8. {
  9. internal partial class OleDbConnectionEditor : ConnectionEditorBase
  10. {
  11. // imported from MS OLE DB Service Component 1.0 Type library
  12. [Guid("00000550-0000-0010-8000-00AA006D2EA4")]
  13. [ComImport]
  14. [TypeLibType((short)4160)]
  15. [DefaultMember("ConnectionString")]
  16. [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIDispatch)]
  17. internal interface _Connection
  18. {
  19. [DispId(5)]
  20. void Close();
  21. object Execute([MarshalAs(UnmanagedType.BStr)] string CommandText, [Out] out object RecordsAffected, int Options);
  22. [DispId(7)]
  23. int BeginTrans();
  24. [DispId(8)]
  25. void CommitTrans();
  26. [DispId(9)]
  27. void RollbackTrans();
  28. [DispId(10)]
  29. void Open([MarshalAs(UnmanagedType.BStr)] string ConnectionString, [MarshalAs(UnmanagedType.BStr)] string UserID, [MarshalAs(UnmanagedType.BStr)] string Password, int Options);
  30. [DispId(19)]
  31. object OpenSchema(object Schema, object Restrictions, object SchemaID);
  32. [DispId(21)]
  33. void Cancel();
  34. int Attributes { [DispId(14)] get; [DispId(14)] set; }
  35. int CommandTimeout { [DispId(2)] get; [DispId(2)] set; }
  36. string ConnectionString { [DispId(0)][return: MarshalAs(UnmanagedType.BStr)] get; [DispId(0)] set; }
  37. int ConnectionTimeout { [DispId(3)] get; [DispId(3)] set; }
  38. object CursorLocation { [DispId(15)] get; [DispId(15)] set; }
  39. string DefaultDatabase { [DispId(12)][return: MarshalAs(UnmanagedType.BStr)] get; [DispId(12)] set; }
  40. object Errors { [DispId(11)] get; }
  41. object IsolationLevel { [DispId(13)] get; [DispId(13)] set; }
  42. object Mode { [DispId(16)] get; [DispId(16)] set; }
  43. object Properties { [DispId(500)] get; }
  44. string Provider { [DispId(17)][return: MarshalAs(UnmanagedType.BStr)] get; [DispId(17)] set; }
  45. int State { [DispId(18)] get; }
  46. string Version { [DispId(4)][return: MarshalAs(UnmanagedType.BStr)] get; }
  47. }
  48. [Guid("00000514-0000-0010-8000-00AA006D2EA4")]
  49. [ComImport]
  50. [TypeLibType((short)6)]
  51. [ClassInterface(ClassInterfaceType.None)]
  52. [ComSourceInterfaces("ConnectionEvents")]
  53. internal class ConnectionClass : _Connection
  54. {
  55. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(7)]
  56. public virtual extern int BeginTrans();
  57. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x15)]
  58. public virtual extern void Cancel();
  59. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(5)]
  60. public virtual extern void Close();
  61. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(8)]
  62. public virtual extern void CommitTrans();
  63. [return: MarshalAs(UnmanagedType.Interface)]
  64. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(6)]
  65. public virtual extern object Execute([In, MarshalAs(UnmanagedType.BStr)] string CommandText, [Optional, MarshalAs(UnmanagedType.Struct)] out object RecordsAffected, [In, Optional, DefaultParameterValue(-1)] int Options);
  66. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(10)]
  67. public virtual extern void Open([In, Optional, DefaultParameterValue(""), MarshalAs(UnmanagedType.BStr)] string ConnectionString, [In, Optional, DefaultParameterValue(""), MarshalAs(UnmanagedType.BStr)] string UserID, [In, Optional, DefaultParameterValue(""), MarshalAs(UnmanagedType.BStr)] string Password, [In, Optional, DefaultParameterValue(-1)] int Options);
  68. [return: MarshalAs(UnmanagedType.Interface)]
  69. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x13)]
  70. public virtual extern object OpenSchema([In] object Schema, [In, Optional, MarshalAs(UnmanagedType.Struct)] object Restrictions, [In, Optional, MarshalAs(UnmanagedType.Struct)] object SchemaID);
  71. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(9)]
  72. public virtual extern void RollbackTrans();
  73. [DispId(14)]
  74. public virtual extern int Attributes { [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(14)] get; [param: In][MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(14)] set; }
  75. [DispId(2)]
  76. public virtual extern int CommandTimeout { [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(2)] get; [param: In][MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(2)] set; }
  77. [DispId(0)]
  78. public virtual extern string ConnectionString { [return: MarshalAs(UnmanagedType.BStr)][MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0)] get; [param: In, MarshalAs(UnmanagedType.BStr)][MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0)] set; }
  79. [DispId(3)]
  80. public virtual extern int ConnectionTimeout { [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(3)] get; [param: In][MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(3)] set; }
  81. [DispId(15)]
  82. public virtual extern object CursorLocation { [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(15)] get; [param: In][MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(15)] set; }
  83. [DispId(12)]
  84. public virtual extern string DefaultDatabase { [return: MarshalAs(UnmanagedType.BStr)][MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(12)] get; [param: In, MarshalAs(UnmanagedType.BStr)][MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(12)] set; }
  85. [DispId(11)]
  86. public virtual extern object Errors { [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(11)] get; }
  87. [DispId(13)]
  88. public virtual extern object IsolationLevel { [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(13)] get; [param: In][MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(13)] set; }
  89. [DispId(0x10)]
  90. public virtual extern object Mode { [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x10)] get; [param: In][MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x10)] set; }
  91. [DispId(500)]
  92. public virtual extern object Properties { [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(500)] get; }
  93. [DispId(0x11)]
  94. public virtual extern string Provider { [return: MarshalAs(UnmanagedType.BStr)][MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x11)] get; [param: In, MarshalAs(UnmanagedType.BStr)][MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x11)] set; }
  95. [DispId(0x12)]
  96. public virtual extern int State { [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x12)] get; }
  97. [DispId(4)]
  98. public virtual extern string Version { [return: MarshalAs(UnmanagedType.BStr)][MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(4)] get; }
  99. }
  100. [ComImport, TypeLibType((short)0x1040), Guid("2206CCB2-19C1-11D1-89E0-00C04FD7A829")]
  101. private interface IDataSourceLocator
  102. {
  103. [DispId(0x60020000)]
  104. int hWnd { [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x60020000)] get; [param: In][MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x60020000)] set; }
  105. [return: MarshalAs(UnmanagedType.IDispatch)]
  106. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x60020002)]
  107. object PromptNew();
  108. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x60020003)]
  109. bool PromptEdit([In, Out, MarshalAs(UnmanagedType.IDispatch)] ref object ppADOConnection);
  110. }
  111. [ComImport, TypeLibType((short)2), ClassInterface((short)0), Guid("2206CDB2-19C1-11D1-89E0-00C04FD7A829"), ComConversionLoss]
  112. private class DataLinksClass : IDataSourceLocator
  113. {
  114. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x60020003)]
  115. public virtual extern bool PromptEdit([In, Out, MarshalAs(UnmanagedType.IDispatch)] ref object ppADOConnection);
  116. [return: MarshalAs(UnmanagedType.IDispatch)]
  117. [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x60020002)]
  118. public virtual extern object PromptNew();
  119. [DispId(0x60020000)]
  120. public virtual extern int hWnd { [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x60020000)] get; [param: In][MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime), DispId(0x60020000)] set; }
  121. }
  122. private string GetConnectionString(string connectionString)
  123. {
  124. DataLinksClass dataLinks = new DataLinksClass();
  125. _Connection connection = null;
  126. if (String.IsNullOrEmpty(connectionString))
  127. {
  128. connection = dataLinks.PromptNew() as _Connection;
  129. if (connection == null)
  130. return "";
  131. return connection.ConnectionString;
  132. }
  133. connection = new ConnectionClass();
  134. connection.ConnectionString = connectionString;
  135. object objConnection = connection;
  136. if (dataLinks.PromptEdit(ref objConnection))
  137. return connection.ConnectionString;
  138. return connectionString;
  139. }
  140. private void Localize()
  141. {
  142. MyRes res = new MyRes("ConnectionEditors,OleDb");
  143. gbConnection.Text = res.Get("ConnectionString");
  144. btnBuild.Text = res.Get("Build");
  145. }
  146. private void btnBuild_Click(object sender, EventArgs e)
  147. {
  148. tbConnection.Text = GetConnectionString(tbConnection.Text);
  149. }
  150. protected override string GetConnectionString()
  151. {
  152. return tbConnection.Text;
  153. }
  154. protected override void SetConnectionString(string value)
  155. {
  156. tbConnection.Text = value;
  157. }
  158. /*public override void UpdateLayout()
  159. {
  160. tbConnection.Height = gbConnection.Height - tbConnection.Top - tbConnection.Left;
  161. }*/
  162. public OleDbConnectionEditor()
  163. {
  164. InitializeComponent();
  165. Localize();
  166. }
  167. }
  168. }