簡體   English   中英

是否可以使用SQLConfigDataSourceW從C#創建ODBC系統DSN?

[英]Is it possible to create a ODBC System DSN from C# using SQLConfigDataSourceW?

我需要以編程方式從C#創建ODBC DSN連接。 我得到了下面的代碼,該代碼使用SQLConfigDataSourceW函數創建ODBC DSN連接。

   public class OdbcWrapper
{

    [DllImport("ODBCCP32.DLL", CharSet = CharSet.Unicode, SetLastError = true)]
    static extern bool SQLConfigDataSourceW(UInt32 hwndParent, RequestFlags fRequest, string lpszDriver, string lpszAttributes);

    enum RequestFlags : int
    {
        ODBC_ADD_DSN = 1,
        ODBC_CONFIG_DSN = 2,
        ODBC_REMOVE_DSN = 3,
        ODBC_ADD_SYS_DSN = 4,
        ODBC_CONFIG_SYS_DSN = 5,
        ODBC_REMOVE_SYS_DSN = 6,
        ODBC_REMOVE_DEFAULT_DSN = 7
    }

    public bool UpdateDsnServer(string name, string server)
    {
        var flag = RequestFlags.ODBC_ADD_DSN;
        string dsnNameLine = "DSN=" + name;
        string serverLine = "Server=" + server;

        string trusted = "Trusted_Connection=YES";

        string configString = new[] { dsnNameLine, serverLine,trusted }.Aggregate("", (str, line) => str + line + "\0");

        return SQLConfigDataSourceW(0, flag, "SQL Server", configString);
    }
}

我可以使用以下方法致電:

var odbc = new OdbcWrapper();
bool test = odbc.UpdateDsnServer("TEST_DSN_NAME", "TEST_SERVER_NAME");
MessageBox.Show(test.ToString());

這適用於ODBC_ADD_DSN = 1在其中創建用戶DSN並返回test = true ,但是當我將標志更改為ODBC_ADD_SYS_DSN = 4它返回test = false並且未創建系統DSN,這兩種情況均通過檢查ODBC數據源管理員來確認。

以提升的權限運行該應用程序可以創建系統DSN。 上面的代碼按原樣工作,但是該應用程序缺少ODBC數據源管理器中請求的權限提升。 一旦以正確的權限運行,該代碼將復制創建,刪除和配置用戶,文件和系統DSN的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM