使用C#有两种方法可以动态的创建ODBC数据源,这里我用比较常用的SQL2000作为例子。

方法1:直接操作注册表,需要引用Microsoft.Win32命名空间

/// <summary>
/// 创建SQL数据源 /// </summary> /// <param name="dns">数据源名称</param> /// <param name="server">服务器</param> /// <param name="database">数据库</param> /// <returns></returns> private bool CreateSqlODBC(string dsn, string server,string database) { try { RegistryKey regKey = Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenSubKey("ODBC").OpenSubKey("ODBC.INI", true).CreateSubKey(dsn); regKey.SetValue("Driver", @"C:\WINDOWS\system32\SQLSRV32.dll"); regKey.SetValue("Server", server); regKey.SetValue("Database", database); regKey = Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenSubKey("ODBC").OpenSubKey("ODBC.INI", true).OpenSubKey(
"ODBC Data Sources", true); regKey.SetValue(dns, "SQL Server"); return true; } catch { return false; } }

方法2:使用P/Invoke(平台调用),需要引用System.Runtime.InteropServices命名空间,具体的函数参数MSDN有比较详细的解释

[DllImport("ODBCCP32.DLL")]

public static extern int SQLConfigDataSource(IntPtr hwndParent, int fRequest, string lpszDriver, string lpszAttributes); 

private int CreateSqlODBC(string dsn, string description, string server, string database)

{

            string lpszAttributes = string.Empty;

            lpszAttributes += string.Format("DSN={0}\0",dsn);

            lpszAttributes += string.Format("DESCRIPTION={0}\0", description);

            lpszAttributes += string.Format("SERVER={0}\0", server);

            lpszAttributes += string.Format("DATABASE={0}\0", database);

            return SQLConfigDataSource((IntPtr), , "SQL Server", lpszAttributes);

}

创建其他类型的ODBC数据源更改相应的驱动和注册表项即可。

c#动态创建ODBC数据源的更多相关文章

  1. Delphi动态配置ODBC数据源--SQL Server版本

    (摘自)http://jxlearnew.blog.163.com/blog/static/549786592007102451431413/ 这里介绍一种用Delphi来实现动态注册的方法,希望对各 ...

  2. spring 动态创建数据源

    项目需求如下,公司对外提供服务,公司本身有个主库,另外公司会为每个新客户创建一个数据库,客户的数据库地址,用户名,密码,都保存在主数据库中.由于不断有新的客户加入,所以要求,项目根据主数据库中的信息, ...

  3. SQLSERVER 创建ODBC 报错的解决办法 SQLState:'01000'的解决方案

    错误详情如下: SQLState:'01000' SQL Server 错误:14 [Microsoft][ODBC SQL Server Driver][DBNETLIB] ConnectionOp ...

  4. PLSQL 使用ODBC 数据源导入来自SQLSERVER的数据

    1. 创建ODBC数据源 方法: 打开控制命令 Win10 运行->输入 control 查看方式大图标--选择 管理工具 2. 安装了 64位的plsql 应该也选用 64位的ODBC数据源 ...

  5. C++链接ODBC数据源:VS2013,Access

    参考资料:1.http://wenku.baidu.com/view/a92d1a812cc58bd63186bd8d.html 2.http://blog.sina.com.cn/s/blog_68 ...

  6. 细聊Oracle通过ODBC数据源连接SQL Server数据库

    类似文章搜索引擎上有很多,内容大致相同,今天所谓细聊是因为我在借鉴这些文章时候走了些弯路,所以写此文,为自己备忘,同时如果能为初涉此处知识点的小伙伴提供些帮助就更好了,文章结尾处的一些扩展有一定实战意 ...

  7. spring动态创建数据源

    在最近的项目业务中,需要在程序的运行过程中,添加新的数据库添链接进来,然后从新数据库链接中读取数据. 网上查阅了资料,发现spring为多数据源提供了一个抽象类AbstractRoutingDataS ...

  8. Spring 动态创建并切换数据源

    公司要求后端项目可以进行动态创建并切换数据源,看了网上很多例子大多数使用的都是Spring内置的AbstractRoutingDataSource进行的,使用此方法不是不行但是有诸多缺陷,比如切换时需 ...

  9. Oracle连接odbc数据源

    Oracle连接odbc数据源 说明 oracle连接ODBC数据源有两种方式,hsodbc和dg4odbc,简单说dg4odbc是hsodbc的升级.两种连接方法大致一样,现将连接步骤说明如下: 检 ...

随机推荐

  1. UVa(247),Floyd做传递闭包

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  2. Sql Server 2008完全卸载方法(其他版本类似)

    一.    SQL2008卸载. 1.从控制面板卸载 1)点击计算机右下角“开始”,点击“控制面板” 2)点击“卸载程序”. 3)在程序列表中找到“Microsoft SQL Server 2008” ...

  3. Java中的String、StringBuilder、StringBuffer

    可以证明,字符串操作是计算机程序设计中最常见的行为. 一.String 首先我们要明确,String并不是基本数据类型,而是一个对象,并且是不可变的对象.查看源码就会发现String类为final型的 ...

  4. spring事务之——spring配置事务的五种方式

    Spring配置文件中关于事务配置总是由三个部分组成,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSo ...

  5. c++中char*\wchar_t*\string\wstring之间的相互转换

    string U2A(const wstring& str)//Unicode字符转Ascii字符 { string strDes; if ( str.empty() ) goto __end ...

  6. 面向对象--类库、委托、is和as运算符、泛型集合

    类库: 其实就是一堆类文件,只是看不到这些类的源代码,保密性好. 优点:保密性好 缺点:如果这个方法不好用,使用者无法自己去更改它. 给的大多是dll文件.使用方法:引用右键,添加引用,浏览,选择到相 ...

  7. jsp利用cookie记住用户名,下次登录时显示在文本框中(仅仅一个Cookie就整了将近三个小时,⊙﹏⊙b汗)

    <%@page import="java.net.URLDecoder"%> <%@page import="sun.security.util.Len ...

  8. sqlmap基本命令

    ./sqlmap.py –h //查看帮助信息./sqlmap.py –u “http://www.anti-x.net/inject.asp?id=injecthere” //get注入./sqlm ...

  9. factory工厂模式之抽象工厂AbstractFactory

    * 抽象工厂: 意图在于创建一系列互相关联或互相依赖的对象. * 每个工厂都会创建一个或多个一系列的产品 * 适用于:产品不会变动,开始时所有产品都创建好,然后根据分类获取想要的 某一类产品(很像sp ...

  10. python 自动生成C++代码 (代码生成器)

    python 代码自动生成的方法 (代码生成器) 遇到的问题 工作中遇到这么一个事,需要写很多C++的底层数据库类,但这些类大同小异,无非是增删改查,如果人工来写代码,既费力又容易出错:而借用pyth ...