Вы могли бы назвать SQLDataSources-функцию в Odbc32.dll:
using System.Runtime.InteropServices;
public static class OdbcWrapper
{
[DllImport("odbc32.dll")]
public static extern int SQLDataSources(int EnvHandle, int Direction, StringBuilder ServerName, int ServerNameBufferLenIn,
ref int ServerNameBufferLenOut, StringBuilder Driver, int DriverBufferLenIn, ref int DriverBufferLenOut);
[DllImport("odbc32.dll")]
public static extern int SQLAllocEnv(ref int EnvHandle);
}
Пример, в котором перечислены источники данных:
public void ListODBCsources()
{
int envHandle=0;
const int SQL_FETCH_NEXT = 1;
const int SQL_FETCH_FIRST_SYSTEM = 32;
if (OdbcWrapper.SQLAllocEnv(ref envHandle) != -1)
{
int ret;
StringBuilder serverName = new StringBuilder(1024);
StringBuilder driverName = new StringBuilder(1024);
int snLen = 0;
int driverLen = 0;
ret = OdbcWrapper.SQLDataSources(envHandle, SQL_FETCH_FIRST_SYSTEM, serverName, serverName.Capacity, ref snLen,
driverName, driverName.Capacity, ref driverLen);
while (ret == 0)
{
System.Windows.Forms.MessageBox.Show(serverName + System.Environment.NewLine + driverName);
ret = OdbcWrapper.SQLDataSources(envHandle, SQL_FETCH_NEXT, serverName, serverName.Capacity, ref snLen,
driverName, driverName.Capacity, ref driverLen);
}
}
}
Первый вызов SQLDataSources с SQL_FETCH_FIRST_SYSTEM
говорит функцию, чтобы начать с использованием системных DSN. Если вы просто начали с SQL_FETCH_NEXT
, сначала будут перечислены драйверы. Link to the function ref on Microsofts site
Edit:
Все, кажется, знают это, но я только что узнал вчера, когда я использовал этот код в новом ПРОЕКТУ: если вы компилируете это с VS на 64 Bit Windows, вы должны установить «Target Platform "до" x86 "или код не будет работать.
Удивительный ответ. Мне пришлось искать SQL_FETCH_FIRST_USER, чтобы заставить его работать в моей среде, но это было тривиально. Приветствия. –
@Stephan Keller вы можете мне помочь с функцией sqlgetinfo в C# – Arshad
@Arshad: Извините, мне никогда не приходилось использовать SQLGetInfo, поэтому у меня нет реализации для нее. –