Bug #82415 Creating a DSN using SQLConfigDataSource with null window handle emits Exception
Submitted: 2 Aug 2016 17:36 Modified: 5 Sep 2016 14:06
Reporter: Nathaniel Madura Email Updates:
Status: No Feedback Impact on me:
None 
Category:Connector / ODBC Severity:S2 (Serious)
Version:5.3.6 OS:Windows (32)
Assigned to: Assigned Account CPU Architecture:Any
Tags: SQLConfigDataSource

[2 Aug 2016 17:36] Nathaniel Madura
Description:
When calling (from a Console Application/C#)

BOOL SQLConfigDataSource(
     HWND     hwndParent,
     WORD     fRequest,
     LPCSTR   lpszDriver,
     LPCSTR   lpszAttributes);

https://msdn.microsoft.com/en-us/library/ms716476(v=vs.85).aspx

Above documentation says passing a NULL (IntPtr.Zero) to hwndParent will suppress dialog boxes.

However, when using NULL as an argument the connector emits a System.AccessViolationException

How to repeat:
public static class Stub
{
[DllImport("ODBCCP32.dll")]
private static extern bool SQLConfigDataSource(IntPtr hwndParent, int fRequest, string lpszDriver, string lpszAttributes);

       public static void CreateDataSource()
       {
            StringBuilder sb = new StringBuilder();
            sb.AppendFormat("Database={0}", k_Database);
            sb.Append((char)0);
            sb.AppendFormat("Description={0}", k_Description);
            sb.Append((char)0);
            sb.AppendFormat("Port={0}", k_Port);
            sb.Append((char)0);
            sb.AppendFormat("Pwd={0}", k_Pwd);
            sb.Append((char)0);
            sb.AppendFormat("Server={0}", k_Server);
            sb.Append((char)0);
            sb.AppendFormat("UID={0}", k_Uid);
            sb.Append((char)0);
            sb.Append((char)0);
         
            bool ret = SQLConfigDataSource(handle, ODBC_ADD_USER_DSN, k_Driver, sb.ToString());
       }

}

Suggested fix:
myodbc dll should be able to accept NULL as a window handle, as this is outlined as acceptable by Microsoft's api

In the mean time passing a window handle from Process.GetCurrentProcess().MainWindowHandle seems to be a viable work-around, however the client will still be presented with the mysql connector dialog box.
[2 Aug 2016 18:00] Nathaniel Madura
After further review, specifying the DNS parameter did allow NULL to function.

So the unexpected behavior may only occur when the "Attributes"/Connection string is incorrect.

it seems like the better behavior would be to return false and utilize SQLInstallerError to pass info back, rather than causing an exception with a null window handle.
[5 Aug 2016 14:06] Chiranjeevi Battula
Hello Nathaniel,

Thank you for the bug report.
Could you please provide repeatable test case (exact steps, sample project, etc. - please make it as private if you prefer) to confirm this issue at our end?

Thanks,
Chiranjeevi.
[6 Sep 2016 1:00] Bugs System
No feedback was provided for this bug for over a month, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".