C#IsODBCServerAvailable
我想实现一个“smartODBCLogin”。 我知道如何从注册表中获取来自所有ODBC数据源的所有EngineName和驱动程序的列表 现在我想知道,这些资源中哪些是可用的(活动的)。 (打开新的ODBC连接不起作用,需要花费很多时间。)C#IsODBCServerAvailable,c#,odbc,reachability,dsn,C#,Odbc,Reachability,Dsn,我想实现一个“smartODBCLogin”。 我知道如何从注册表中获取来自所有ODBC数据源的所有EngineName和驱动程序的列表 现在我想知道,这些资源中哪些是可用的(活动的)。 (打开新的ODBC连接不起作用,需要花费很多时间。) 有人知道如何在c#中实现这一点吗?没有.NET API(我知道),但有一个本机ODBC API。还有一个列出用户和系统DSN的nice。CodeProject中还有一个代码示例 如果您赶时间,以下是第一篇文章示例(用于获取用户和系统DSN),展示了他们剽窃的
有人知道如何在c#中实现这一点吗?没有.NET API(我知道),但有一个本机ODBC API。还有一个列出用户和系统DSN的nice。CodeProject中还有一个代码示例 如果您赶时间,以下是第一篇文章示例(用于获取用户和系统DSN),展示了他们剽窃的荣耀: 获取系统DSN:
/// <summary>
/// Gets all System data source names for the local machine.
/// </summary>
public System.Collections.SortedList GetSystemDataSourceNames()
{
System.Collections.SortedList dsnList = new System.Collections.SortedList();
// get system dsn's
Microsoft.Win32.RegistryKey reg = (Microsoft.Win32.Registry.LocalMachine).OpenSubKey("Software");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC.INI");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC Data Sources");
if (reg != null)
{
// Get all DSN entries defined in DSN_LOC_IN_REGISTRY.
foreach (string sName in reg.GetValueNames())
{
dsnList.Add(sName, DataSourceType.System);
}
}
try
{
reg.Close();
}
catch { /* ignore this exception if we couldn't close */ }
}
}
}
return dsnList;
}
/// <summary>
/// Gets all User data source names for the local machine.
/// </summary>
public System.Collections.SortedList GetUserDataSourceNames()
{
System.Collections.SortedList dsnList = new System.Collections.SortedList();
// get user dsn's
Microsoft.Win32.RegistryKey reg = (Microsoft.Win32.Registry.CurrentUser).OpenSubKey("Software");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC.INI");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC Data Sources");
if (reg != null)
{
// Get all DSN entries defined in DSN_LOC_IN_REGISTRY.
foreach (string sName in reg.GetValueNames())
{
dsnList.Add(sName, DataSourceType.User);
}
}
try
{
reg.Close();
}
catch { /* ignore this exception if we couldn't close */ }
}
}
}
return dsnList;
}
// Returns a list of data source names from the local machine.
public System.Collections.SortedList GetAllDataSourceNames()
{
// Get the list of user DSN's first.
System.Collections.SortedList dsnList = GetUserDataSourceNames();
// Get list of System DSN's and add them to the first list.
System.Collections.SortedList systemDsnList = GetSystemDataSourceNames();
for (int i = 0; i < systemDsnList.Count; i++)
{
string sName = systemDsnList.GetKey(i) as string;
DataSourceType type = (DataSourceType)systemDsnList.GetByIndex(i);
try
{
// This dsn to the master list
dsnList.Add(sName, type);
}
catch
{
// An exception can be thrown if the key being added is a duplicate so
// we just catch it here and have to ignore it.
}
}
return dsnList;
}
// fill data source names
DevToolShed.OdbcDataSourceManager dsnManager = new DevToolShed.OdbcDataSourceManager();
System.Collections.SortedList dsnList = dsnManager.GetAllDataSourceNames();
for (int i = 0; i < dsnList.Count; i++)
{
string sName = (string)dsnList.GetKey(i);
DevToolShed.DataSourceType type = (DevToolShed.DataSourceType)dsnList.GetByIndex(i);
cbxDataSourceName.Items.Add(sName + " - (" + type.ToString() + " DSN)");
}
//
///获取本地计算机的所有系统数据源名称。
///
public System.Collections.SortedList GetSystemDataSourceNames()
{
System.Collections.SortedList dsnList=新的System.Collections.SortedList();
//获取系统dsn的
Microsoft.Win32.RegistryKey reg=(Microsoft.Win32.Registry.LocalMachine).OpenSubKey(“软件”);
如果(reg!=null)
{
reg=reg.OpenSubKey(“ODBC”);
如果(reg!=null)
{
reg=reg.OpenSubKey(“ODBC.INI”);
如果(reg!=null)
{
reg=reg.OpenSubKey(“ODBC数据源”);
如果(reg!=null)
{
//获取在\u注册表中的DSN\u LOC\u中定义的所有DSN条目。
foreach(reg.GetValueNames()中的字符串sName)
{
添加(sName,DataSourceType.System);
}
}
尝试
{
注册关闭();
}
catch{/*如果无法关闭*/},请忽略此异常
}
}
}
返回dsnList;
}
获取用户DSN:
/// <summary>
/// Gets all System data source names for the local machine.
/// </summary>
public System.Collections.SortedList GetSystemDataSourceNames()
{
System.Collections.SortedList dsnList = new System.Collections.SortedList();
// get system dsn's
Microsoft.Win32.RegistryKey reg = (Microsoft.Win32.Registry.LocalMachine).OpenSubKey("Software");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC.INI");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC Data Sources");
if (reg != null)
{
// Get all DSN entries defined in DSN_LOC_IN_REGISTRY.
foreach (string sName in reg.GetValueNames())
{
dsnList.Add(sName, DataSourceType.System);
}
}
try
{
reg.Close();
}
catch { /* ignore this exception if we couldn't close */ }
}
}
}
return dsnList;
}
/// <summary>
/// Gets all User data source names for the local machine.
/// </summary>
public System.Collections.SortedList GetUserDataSourceNames()
{
System.Collections.SortedList dsnList = new System.Collections.SortedList();
// get user dsn's
Microsoft.Win32.RegistryKey reg = (Microsoft.Win32.Registry.CurrentUser).OpenSubKey("Software");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC.INI");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC Data Sources");
if (reg != null)
{
// Get all DSN entries defined in DSN_LOC_IN_REGISTRY.
foreach (string sName in reg.GetValueNames())
{
dsnList.Add(sName, DataSourceType.User);
}
}
try
{
reg.Close();
}
catch { /* ignore this exception if we couldn't close */ }
}
}
}
return dsnList;
}
// Returns a list of data source names from the local machine.
public System.Collections.SortedList GetAllDataSourceNames()
{
// Get the list of user DSN's first.
System.Collections.SortedList dsnList = GetUserDataSourceNames();
// Get list of System DSN's and add them to the first list.
System.Collections.SortedList systemDsnList = GetSystemDataSourceNames();
for (int i = 0; i < systemDsnList.Count; i++)
{
string sName = systemDsnList.GetKey(i) as string;
DataSourceType type = (DataSourceType)systemDsnList.GetByIndex(i);
try
{
// This dsn to the master list
dsnList.Add(sName, type);
}
catch
{
// An exception can be thrown if the key being added is a duplicate so
// we just catch it here and have to ignore it.
}
}
return dsnList;
}
// fill data source names
DevToolShed.OdbcDataSourceManager dsnManager = new DevToolShed.OdbcDataSourceManager();
System.Collections.SortedList dsnList = dsnManager.GetAllDataSourceNames();
for (int i = 0; i < dsnList.Count; i++)
{
string sName = (string)dsnList.GetKey(i);
DevToolShed.DataSourceType type = (DevToolShed.DataSourceType)dsnList.GetByIndex(i);
cbxDataSourceName.Items.Add(sName + " - (" + type.ToString() + " DSN)");
}
//
///获取本地计算机的所有用户数据源名称。
///
public System.Collections.SortedList GetUserDataSourceNames()
{
System.Collections.SortedList dsnList=新的System.Collections.SortedList();
//获取用户dsn的
Microsoft.Win32.RegistryKey reg=(Microsoft.Win32.Registry.CurrentUser).OpenSubKey(“软件”);
如果(reg!=null)
{
reg=reg.OpenSubKey(“ODBC”);
如果(reg!=null)
{
reg=reg.OpenSubKey(“ODBC.INI”);
如果(reg!=null)
{
reg=reg.OpenSubKey(“ODBC数据源”);
如果(reg!=null)
{
//获取在\u注册表中的DSN\u LOC\u中定义的所有DSN条目。
foreach(reg.GetValueNames()中的字符串sName)
{
添加(sName,DataSourceType.User);
}
}
尝试
{
注册关闭();
}
catch{/*如果无法关闭*/},请忽略此异常
}
}
}
返回dsnList;
}
获取所有DSN:
/// <summary>
/// Gets all System data source names for the local machine.
/// </summary>
public System.Collections.SortedList GetSystemDataSourceNames()
{
System.Collections.SortedList dsnList = new System.Collections.SortedList();
// get system dsn's
Microsoft.Win32.RegistryKey reg = (Microsoft.Win32.Registry.LocalMachine).OpenSubKey("Software");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC.INI");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC Data Sources");
if (reg != null)
{
// Get all DSN entries defined in DSN_LOC_IN_REGISTRY.
foreach (string sName in reg.GetValueNames())
{
dsnList.Add(sName, DataSourceType.System);
}
}
try
{
reg.Close();
}
catch { /* ignore this exception if we couldn't close */ }
}
}
}
return dsnList;
}
/// <summary>
/// Gets all User data source names for the local machine.
/// </summary>
public System.Collections.SortedList GetUserDataSourceNames()
{
System.Collections.SortedList dsnList = new System.Collections.SortedList();
// get user dsn's
Microsoft.Win32.RegistryKey reg = (Microsoft.Win32.Registry.CurrentUser).OpenSubKey("Software");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC.INI");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC Data Sources");
if (reg != null)
{
// Get all DSN entries defined in DSN_LOC_IN_REGISTRY.
foreach (string sName in reg.GetValueNames())
{
dsnList.Add(sName, DataSourceType.User);
}
}
try
{
reg.Close();
}
catch { /* ignore this exception if we couldn't close */ }
}
}
}
return dsnList;
}
// Returns a list of data source names from the local machine.
public System.Collections.SortedList GetAllDataSourceNames()
{
// Get the list of user DSN's first.
System.Collections.SortedList dsnList = GetUserDataSourceNames();
// Get list of System DSN's and add them to the first list.
System.Collections.SortedList systemDsnList = GetSystemDataSourceNames();
for (int i = 0; i < systemDsnList.Count; i++)
{
string sName = systemDsnList.GetKey(i) as string;
DataSourceType type = (DataSourceType)systemDsnList.GetByIndex(i);
try
{
// This dsn to the master list
dsnList.Add(sName, type);
}
catch
{
// An exception can be thrown if the key being added is a duplicate so
// we just catch it here and have to ignore it.
}
}
return dsnList;
}
// fill data source names
DevToolShed.OdbcDataSourceManager dsnManager = new DevToolShed.OdbcDataSourceManager();
System.Collections.SortedList dsnList = dsnManager.GetAllDataSourceNames();
for (int i = 0; i < dsnList.Count; i++)
{
string sName = (string)dsnList.GetKey(i);
DevToolShed.DataSourceType type = (DevToolShed.DataSourceType)dsnList.GetByIndex(i);
cbxDataSourceName.Items.Add(sName + " - (" + type.ToString() + " DSN)");
}
//从本地计算机返回数据源名称的列表。
public System.Collections.SortedList GetAllDataSourceNames()
{
//首先获取用户DSN的列表。
System.Collections.SortedList dsnList=GetUserDataSourceNames();
//获取系统DSN的列表并将其添加到第一个列表中。
System.Collections.SortedList systemDsnList=GetSystemDataSourceNames();
for(int i=0;i
将它们绑定到组合框:
/// <summary>
/// Gets all System data source names for the local machine.
/// </summary>
public System.Collections.SortedList GetSystemDataSourceNames()
{
System.Collections.SortedList dsnList = new System.Collections.SortedList();
// get system dsn's
Microsoft.Win32.RegistryKey reg = (Microsoft.Win32.Registry.LocalMachine).OpenSubKey("Software");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC.INI");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC Data Sources");
if (reg != null)
{
// Get all DSN entries defined in DSN_LOC_IN_REGISTRY.
foreach (string sName in reg.GetValueNames())
{
dsnList.Add(sName, DataSourceType.System);
}
}
try
{
reg.Close();
}
catch { /* ignore this exception if we couldn't close */ }
}
}
}
return dsnList;
}
/// <summary>
/// Gets all User data source names for the local machine.
/// </summary>
public System.Collections.SortedList GetUserDataSourceNames()
{
System.Collections.SortedList dsnList = new System.Collections.SortedList();
// get user dsn's
Microsoft.Win32.RegistryKey reg = (Microsoft.Win32.Registry.CurrentUser).OpenSubKey("Software");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC.INI");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC Data Sources");
if (reg != null)
{
// Get all DSN entries defined in DSN_LOC_IN_REGISTRY.
foreach (string sName in reg.GetValueNames())
{
dsnList.Add(sName, DataSourceType.User);
}
}
try
{
reg.Close();
}
catch { /* ignore this exception if we couldn't close */ }
}
}
}
return dsnList;
}
// Returns a list of data source names from the local machine.
public System.Collections.SortedList GetAllDataSourceNames()
{
// Get the list of user DSN's first.
System.Collections.SortedList dsnList = GetUserDataSourceNames();
// Get list of System DSN's and add them to the first list.
System.Collections.SortedList systemDsnList = GetSystemDataSourceNames();
for (int i = 0; i < systemDsnList.Count; i++)
{
string sName = systemDsnList.GetKey(i) as string;
DataSourceType type = (DataSourceType)systemDsnList.GetByIndex(i);
try
{
// This dsn to the master list
dsnList.Add(sName, type);
}
catch
{
// An exception can be thrown if the key being added is a duplicate so
// we just catch it here and have to ignore it.
}
}
return dsnList;
}
// fill data source names
DevToolShed.OdbcDataSourceManager dsnManager = new DevToolShed.OdbcDataSourceManager();
System.Collections.SortedList dsnList = dsnManager.GetAllDataSourceNames();
for (int i = 0; i < dsnList.Count; i++)
{
string sName = (string)dsnList.GetKey(i);
DevToolShed.DataSourceType type = (DevToolShed.DataSourceType)dsnList.GetByIndex(i);
cbxDataSourceName.Items.Add(sName + " - (" + type.ToString() + " DSN)");
}
//填写数据源名称
DevToolShed.OdbcDataSourceManager dsnManager=new DevToolShed.OdbcDataSourceManager();
System.Collections.SortedList dsnList=dsnManager.GetAllDataSourceNames();
for(int i=0;i
完整的源代码可以在上面的链接中找到。没有用于此的.NET API(据我所知),但有用于此的本机ODBC API。还有一个列出用户和系统DSN的nice。CodeProject中还有一个代码示例 如果您赶时间,以下是第一篇文章示例(用于获取用户和系统DSN),展示了他们剽窃的荣耀: 获取系统DSN:
/// <summary>
/// Gets all System data source names for the local machine.
/// </summary>
public System.Collections.SortedList GetSystemDataSourceNames()
{
System.Collections.SortedList dsnList = new System.Collections.SortedList();
// get system dsn's
Microsoft.Win32.RegistryKey reg = (Microsoft.Win32.Registry.LocalMachine).OpenSubKey("Software");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC.INI");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC Data Sources");
if (reg != null)
{
// Get all DSN entries defined in DSN_LOC_IN_REGISTRY.
foreach (string sName in reg.GetValueNames())
{
dsnList.Add(sName, DataSourceType.System);
}
}
try
{
reg.Close();
}
catch { /* ignore this exception if we couldn't close */ }
}
}
}
return dsnList;
}
/// <summary>
/// Gets all User data source names for the local machine.
/// </summary>
public System.Collections.SortedList GetUserDataSourceNames()
{
System.Collections.SortedList dsnList = new System.Collections.SortedList();
// get user dsn's
Microsoft.Win32.RegistryKey reg = (Microsoft.Win32.Registry.CurrentUser).OpenSubKey("Software");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC.INI");
if (reg != null)
{
reg = reg.OpenSubKey("ODBC Data Sources");
if (reg != null)
{
// Get all DSN entries defined in DSN_LOC_IN_REGISTRY.
foreach (string sName in reg.GetValueNames())
{
dsnList.Add(sName, DataSourceType.User);
}
}
try
{
reg.Close();
}
catch { /* ignore this exception if we couldn't close */ }
}
}
}
return dsnList;
}
// Returns a list of data source names from the local machine.
public System.Collections.SortedList GetAllDataSourceNames()
{
// Get the list of user DSN's first.
System.Collections.SortedList dsnList = GetUserDataSourceNames();
// Get list of System DSN's and add them to the first list.
System.Collections.SortedList systemDsnList = GetSystemDataSourceNames();
for (int i = 0; i < systemDsnList.Count; i++)
{
string sName = systemDsnList.GetKey(i) as string;
DataSourceType type = (DataSourceType)systemDsnList.GetByIndex(i);
try
{
// This dsn to the master list
dsnList.Add(sName, type);
}
catch
{
// An exception can be thrown if the key being added is a duplicate so
// we just catch it here and have to ignore it.
}
}
return dsnList;
}
// fill data source names
DevToolShed.OdbcDataSourceManager dsnManager = new DevToolShed.OdbcDataSourceManager();
System.Collections.SortedList dsnList = dsnManager.GetAllDataSourceNames();
for (int i = 0; i < dsnList.Count; i++)
{
string sName = (string)dsnList.GetKey(i);
DevToolShed.DataSourceType type = (DevToolShed.DataSourceType)dsnList.GetByIndex(i);
cbxDataSourceName.Items.Add(sName + " - (" + type.ToString() + " DSN)");
}
//
///获取本地计算机的所有系统数据源名称。
///
public System.Collections.SortedList GetSystemDataSourceNames()
{
System.Collections.SortedList dsnList=新的System.Collections.SortedList();
//获取系统dsn的
Microsoft.Win32.RegistryKey reg=(Microsoft.Win32.Registry.LocalMachine).OpenSubKey(“软件”);
如果(reg!=null)
{
reg=reg.OpenSubKey(“ODBC”);
如果(reg!=null)
{
reg=reg.OpenSubKey(“ODBC.INI”);
如果(reg!=null)
{
reg=reg.OpenSubKey(“ODBC数据源”);
如果(reg!=null)
{
//获取在\u注册表中的DSN\u LOC\u中定义的所有DSN条目。
foreach(reg.GetValueNames()中的字符串sName)
{
添加(sName,DataSourceType.System);
}
}
尝试
{
注册关闭();
}
catch{/*忽略此异常