惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
Apple Machine Learning Research
Apple Machine Learning Research
H
Help Net Security
雷峰网
雷峰网
V
Visual Studio Blog
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
Hugging Face - Blog
Hugging Face - Blog
爱范儿
爱范儿
IT之家
IT之家
Engineering at Meta
Engineering at Meta
Microsoft Security Blog
Microsoft Security Blog
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
月光博客
月光博客
A
About on SuperTechFans
B
Blog RSS Feed
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The GitHub Blog
The GitHub Blog
N
Netflix TechBlog - Medium
J
Java Code Geeks
云风的 BLOG
云风的 BLOG
Blog — PlanetScale
Blog — PlanetScale

博客园 - 夏日微风

mysql备份和恢复命令 urllib2下载时判断网页编码 使用setuptools自动安装python模块 Python的MySQL库 php2python Python中文支持小结 WordPress安装步骤 centos 5.6 升级php到5.3 vsftp 的默认目录位置 Linux Develop Notes Linux Command Notes C#格式化数值结果表 - 夏日微风 - 博客园 证监会新年联欢会节目单(征求意见稿) 命案十三宗 看港剧,学穿衣 - 欧阳震华 看港剧,学穿衣 - 张家辉 - 胖矮个 看港剧,学穿衣 - 林保怡 - 小矮个 看港剧,学穿衣 - 罗嘉良 - 土蛋 看港剧,学穿衣 - 苏永康 - 斯文丑男
在.NET中打开ODBC“选择数据源”对话框
夏日微风 · 2004-12-23 · via 博客园 - 夏日微风

在VB和C++中,都有相应的函数来打开ODBC的“选择数据源”对话框,且简单方便。


年轻气盛的.Net,偏偏抛弃了这个对话框;在类库中百复千转,就是没有找到。无奈之下,自己动手。真是信天信地不如信自己,连MS都不能信了,你说还能信谁呢?:)  权衡一翻后,选择了用VC开发一个小COM,在.NET中拉使用。


ODBC API中有 SQLDriverConnect,即是显示“选择数据源”对话框的。代码非常简单,不过十多行,与同好共享:

#ifdef UNICODE
    #define MYSQLCHAR    SQLWCHAR
#
else
    #define MYSQLCHAR    SQLCHAR
#endif

STDMETHODIMP CODBCSourceSelector::Open( OLE_HANDLE hwnd, BSTR 
*connectionString)
{
    CComBSTR bstrConnectionString;

    MYSQLCHAR szConnectOutput[MAX_CONNECT_LEN];
    memset( szConnectOutput, 
0, sizeof( szConnectOutput ) * sizeof( UCHAR ) );

    SQLHDBC hdbc 
= SQL_NULL_HANDLE;
    SQLHENV henv 
= SQL_NULL_HANDLE;

    SQLRETURN ret;
    ret 
= SQLAllocEnv( &henv );
    
if ( SQL_SUCCESS == ret || SQL_SUCCESS_WITH_INFO == ret )
    {
        ret 
= SQLAllocConnect( henv, &hdbc );
    }

    
    
if ( SQL_SUCCESS == ret || SQL_SUCCESS_WITH_INFO == ret )
    {
        HWND realWnd 
= (HWND)hwnd;
        
if ( !realWnd )
        {
            realWnd 
= ::GetDesktopWindow();
        }

        SQLSMALLINT cbConnStrOut 
= 0;
        ret 
= SQLDriverConnect( hdbc, realWnd,
            (MYSQLCHAR
*)NULL, 0
            szConnectOutput, _countof(szConnectOutput), 
            
&cbConnStrOut, 3 );

        
if ( SQL_SUCCESS==ret || SQL_SUCCESS_WITH_INFO==ret )
        {
            bstrConnectionString 
= (TCHAR*)szConnectOutput;

            SQLDisconnect( hdbc );
        }
    }


    SQLFreeConnect( hdbc );
    SQLFreeEnv( henv );

    
*connectionString = bstrConnectionString.Detach();

    
return S_OK;
}

整个 project 下载:https://files.cnblogs.com/dumack/ODBCSource.zip