[英]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.