是否可以使用 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 + "[=10=]");
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());
这适用于创建用户 DSN 的 ODBC_ADD_DSN = 1
和 returns test = true
,但是当我将标志更改为 ODBC_ADD_SYS_DSN = 4
时,它 returns test = false
并且没有创建系统 DSN,这两种情况都通过检查 ODBC 数据源管理器来确认。
运行 具有提升权限的应用程序允许创建系统 DSN。上面的代码按原样工作,但应用程序缺少在 ODBC 数据源管理器中请求的权限提升。一旦 运行 获得正确的权限,代码就会复制创建、删除和配置用户、文件和系统 DSN 的功能。
我需要以编程方式从 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 + "[=10=]");
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());
这适用于创建用户 DSN 的 ODBC_ADD_DSN = 1
和 returns test = true
,但是当我将标志更改为 ODBC_ADD_SYS_DSN = 4
时,它 returns test = false
并且没有创建系统 DSN,这两种情况都通过检查 ODBC 数据源管理器来确认。
运行 具有提升权限的应用程序允许创建系统 DSN。上面的代码按原样工作,但应用程序缺少在 ODBC 数据源管理器中请求的权限提升。一旦 运行 获得正确的权限,代码就会复制创建、删除和配置用户、文件和系统 DSN 的功能。