csharp: read system DSN configured get Driver Names on windows
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using System.Data.Odbc; namespace SQLanyWhereDemo
{
public partial class Form5 : Form
{ [DllImport("odbc32")]
public static extern short SQLAllocHandle(short HandleType, IntPtr InputHandle, out IntPtr OutputHandle);
[DllImport("odbc32", CharSet = CharSet.Unicode)]
public static extern short SQLSetEnvAttr(IntPtr envHandle, ushort attribute, IntPtr val, int stringLength);
[DllImport("odbc32.dll", CharSet = CharSet.Ansi)]
public static extern short SQLDataSources(IntPtr EnvironmentHandle, ushort Direction, StringBuilder ServerName, short BufferLength1, ref short NameLength1Ptr, StringBuilder Description, short BufferLength2, ref short NameLength2Ptr);
[DllImport("ODBCCP32.dll")]
private static extern bool SQLConfigDataSource(IntPtr parent, int request, string driver, string attributes); [DllImport("odbccp32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
private static extern bool SQLGetInstalledDriversW(char[] lpszBuf, ushort cbufMax, out ushort pcbBufOut); public const int SQL_SUCCESS = 0;
public const int SQL_ERROR = -1; public const int SQL_FETCH_NEXT = 1;
public const int SQL_FETCH_FIRST = 2;
public const int SQL_FETCH_FIRST_USER = 31;
public const int SQL_FETCH_FIRST_SYSTEM = 32; public const int SQL_ATTR_ODBC_VERSION = 200; public const int SQL_HANDLE_ENV = 1;
public const int SQL_HANDLE_DBC = 2;
public const int SQL_HANDLE_STMT = 3;
public const int SQL_HANDLE_DESC = 4;
/// <summary>
///
/// </summary>
public Form5()
{
InitializeComponent();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{ List<ODBCStr> ls = new List<ODBCStr>();
short iResult = 0;
IntPtr lhEnvIn = (IntPtr)0;
IntPtr lhEnv = (IntPtr)0;
StringBuilder sDSNItem = new StringBuilder(1024);
StringBuilder sDRVItem = new StringBuilder(1024);
short iDSNLen = 0;
short iDRVLen = 0; SQLSetEnvAttr(lhEnv, 200, (IntPtr)3, 0); iResult = SQLAllocHandle(1, lhEnvIn, out lhEnv);
MessageBox.Show(iResult.ToString(), "iResult SQLAllocHandle"); //short iResult = 0;
//IntPtr lhEnvIn = (IntPtr)0;
//IntPtr lhEnv = (IntPtr)0;
//StringBuilder sDSNItem = new StringBuilder(1024);
//StringBuilder sDRVItem = new StringBuilder(1024);
//short iDSNLen = 0;
//short iDRVLen = 0; iResult = SQLAllocHandle(SQL_HANDLE_ENV, lhEnvIn, out lhEnv); SQLSetEnvAttr(lhEnv, SQL_ATTR_ODBC_VERSION, (IntPtr)3, 0); if (iResult == SQL_SUCCESS)
{
ODBCStr sr = null;
iResult = SQLDataSources(lhEnv, SQL_FETCH_FIRST, sDSNItem, 1024, ref iDSNLen, sDRVItem, 1024, ref iDRVLen);
while (iResult == SQL_SUCCESS)
{
sr=new ODBCStr();
//MessageBox.Show(sDSNItem.ToString(), "sDSNItem.ToString()");
iResult = SQLDataSources(lhEnv, SQL_FETCH_NEXT, sDSNItem, 1024, ref iDSNLen, sDRVItem, 1024, ref iDRVLen);
sr.DsnName = sDSNItem.ToString();
sr.DriveName = sDRVItem.ToString();
//string str = "SERVER=HOME\0DSN=MYDSN\0DESCRIPTION=MYDSNDESC\0DATABASE=DBServer\0TRUSTED_CONNECTION=YES";
//SQLConfigDataSource((IntPtr)0, 4, "Sybase SQL Anywhere 5.0", str);//SQL Server
//MessageBox.Show(str); ls.Add(sr);
}
} this.dataGridView1.DataSource = ls; }
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{ string[] list = GetOdbcDriverNames(); } /// <summary>
/// Gets the ODBC driver names from the SQLGetInstalledDrivers function.
/// </summary>
/// <returns>a string array containing the ODBC driver names, if the call to SQLGetInstalledDrivers was successfull; null, otherwise.</returns>
public static string[] GetOdbcDriverNames()
{
string[] odbcDriverNames = null;
char[] driverNamesBuffer = new char[ushort.MaxValue];
ushort size; bool succeeded = SQLGetInstalledDriversW(driverNamesBuffer, ushort.MaxValue, out size); if (succeeded == true)
{
char[] driverNames = new char[size - 1];
Array.Copy(driverNamesBuffer, driverNames, size - 1);
odbcDriverNames = (new string(driverNames)).Split('\0');
} return odbcDriverNames;
}
} /// <summary>
/// 涂聚文
/// 20180223
/// Geovin Du
/// </summary>
public class ODBCStr
{
/// <summary>
///
/// </summary>
public string DriveName { get; set; }
/// <summary>
///
/// </summary>
public string DsnName { get; set; }
/// <summary>
///
/// </summary>
public string ServerName { get; set; }
/// <summary>
///
/// </summary>
public string DatabaseName { get; set; }
/// <summary>
///
/// </summary>
public string DataSrource { get; set; }
/// <summary>
///
/// </summary>
public string DataFile { get; set; } } }
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{ //string connectionString = "dsn=LocalServer";
//System.Data.Common.DbConnectionStringBuilder builder = new System.Data.Common.DbConnectionStringBuilder();
//builder.ConnectionString = connectionString;
//string server = builder["Data Source"] as string;
//string database = builder["Initial Catalog"] as string; //string conString = "SERVER=localhost;DATABASE=tree;UID=root;PASSWORD=branch;Min Pool Size = 0;Max Pool Size=200";
//SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(conString);
//string user = builder.UserID;
//string pass = builder.Password; //OdbcConnectionStringBuilder buil =new OdbcConnectionStringBuilder();
//buil.Driver = "Sybase SQL Anywhere 5.0";
//buil.Dsn = "achive"; System.Data.Odbc.OdbcConnectionStringBuilder connBuilder = new System.Data.Odbc.OdbcConnectionStringBuilder();
connBuilder.Dsn = "achive";
connBuilder.Driver = "Sybase SQL Anywhere 5.0";
//connBuilder.Add("uid", "");
//connBuilder.Add("pwd", ""); connBuilder.Add("database", "涂聚文"); string sss = connBuilder.ToString();
//MessageBox.Show(connBuilder.ToString());
System.Data.Odbc.OdbcConnection conn = new System.Data.Odbc.OdbcConnection(connBuilder.ToString());
try
{
conn.Open();
System.Data.Odbc.OdbcCommand comm = new System.Data.Odbc.OdbcCommand("select count(*) from item_description", conn);
var reader = comm.ExecuteReader();
while (reader.Read())
{
MessageBox.Show(reader[0].ToString());
}
MessageBox.Show("连接成功!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
finally
{
conn.Close();
} //设置
//OdbcConnectionStringBuilder.Dsn=connectionString; } /// <summary>
///
/// </summary>
/// <param name="Database"></param>
/// <param name="Version"></param>
/// <returns></returns>
public static string GetODBCDriverName(string Database, string Version)
{ string ODBCDriverName = ""; RegistryKey registryKey = Registry.LocalMachine; RegistryKey registrySubKey = registryKey.OpenSubKey(@"SOFTWARE\ODBC\ODBCINST.INI\"); String[] SubKeyNames = registrySubKey.GetSubKeyNames(); foreach (String KeyName in SubKeyNames)
{ if (KeyName.Contains(Database) && KeyName.Contains(Version))
{ ODBCDriverName = KeyName; break; }
} registrySubKey.Close(); registryKey.Close(); return ODBCDriverName; }
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button4_Click(object sender, EventArgs e)
{
OdbcConnectionStringBuilder odbcConnectionStringBuilder = new OdbcConnectionStringBuilder();
OdbcCommand odbcCommand;
int RecordFound = 0;
odbcConnectionStringBuilder.Driver = GetODBCDriverName("Sybase SQL Anywhere", "5.0");
if (odbcConnectionStringBuilder.Driver == "")
{ MessageBox.Show(" ODBC Driver is not installed");
//return -1;
}
odbcConnectionStringBuilder.Add("DSN", "achive");
//odbcConnectionStringBuilder.Add("UID", "no-user");
//odbcConnectionStringBuilder.Add("PWD", "no-pass");
odbcConnectionStringBuilder.Add("DB", @"C:\Documents and Settings\geovindu\My Documents\Visual Studio 2010\Projects\SQLanyWhereDemo\SQLanyWhereDemo\bin\Debug\geovindu.db;"); // copy of database SPORTS
odbcConnectionStringBuilder.Add("HOST", ".");
//odbcConnectionStringBuilder.Add("PORT", "5162"); // i found this port inn the log file
using (OdbcConnection connection = new OdbcConnection(odbcConnectionStringBuilder.ConnectionString)) { connection.Open();
try
{
odbcCommand = new OdbcCommand("SELECT COUNT(*) FROM pub.Invoice WHERE Invoicenum > 0", connection);
odbcCommand.CommandTimeout = 1;
object executeScalarResult = odbcCommand.ExecuteScalar();
RecordFound = Convert.ToInt32(executeScalarResult);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
} }
csharp: read system DSN configured get Driver Names on windows的更多相关文章
- How to configure ODBC DSN to access local DB2 for Windows
How to configure ODBC DSN to access local DB2 for Windows MA Genfeng (GuangdongUnitoll Services inco ...
- busdog is a filter driver for MS Windows (XP and above) to sniff USB traffic.
https://code.google.com/p/busdog/ busdog is a filter driver for MS Windows (XP and above) to sniff U ...
- UAP开发错误之The given System.Uri cannot be converted into a Windows.Foundation.Uri(windows phone背景更换)
今天博主在开发一款windows phone应用时,希望实现app背景的更换,思路很简单.使用ApplicationDataContainer容器存储我的图片路径,每次载入应用时读取这个路径以决定我用 ...
- mongodb c++ driver(2.53)windows编译
编译环境: (1) 下载python2.7, 使用x86_32位,因为scons只有32位安装包可用: (2) 下载scons2.3.0,The current production release ...
- MongoDB C Driver Building on Windows
一.编译mongodb c driver: 需要先安装OpenSSL:(参见:http://bbs.aircheng.com/read-2222-1) 步骤:(MongoDB步) 1.下载Active ...
- System Operations on AWS - Lab 4W - Monitoring (Windows)
创建Web Server实例,配置CloudWatch来收集Web Server的系统日志,当错误登录次数达到设定值时触发报警 1. 创建Web Server 1.1 创建一个IAM策略 1.2 创建 ...
- Fail to start neutron-server
问题: [root@localhost ~]# systemctl status neutron-server ● neutron-server.service - OpenStack Neutron ...
- openstack学习之neutron ml2初始化代码分析
这里没有 去详细考虑neutron server怎么初始化的,而是直接从加载插件的地方开始分析.首先我们看下下面这个文件. Neutron/api/v2/router.py class APIRout ...
- System Error Codes
很明显,以下的文字来自微软MSDN 链接http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx M ...
随机推荐
- WITH RECOMPILE和OPTION(RECOMPILE)区别
在考虑重编译T-SQL(或者存储过程)的时候,有两种方式可以实现强制重编译(前提是忽略导致重编译的其他因素的情况下,比如重建索引,更新统计信息等等), 一是基于WITH RECOMPILE的存储过程级 ...
- Linux 磁盘告警分析
硬件配置 cat /etc/redhat-release && dmidecode -s system-product-name && cat /proc/cpuinf ...
- PHP画矩形,椭圆,圆,画椭圆弧 ,饼状图
1:画矩形: imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col ) imagere ...
- javascript 最全面的数组操作合集
一.数组添加.删除.替换.截取操作 1.arr.unshift(1) 在数组头部添加一个元素 1 (直接改变原数组,返回值为添加元素后数组的length) 2.arr.shift() 在数组的头部删除 ...
- Django--文件上传和下载,自测试可用
html <div class="form-group col-sm-offset-2 col-sm-10"> <label for="exampleI ...
- (剑指Offer)面试题45:圆圈中最后剩下的数字
题目: 0,1,...n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字,求出这个圆圈里剩下的最后一个数字. 思路: 1.环形链表模拟圆圈 创建一个n个节点的环形链表,然后每次在 ...
- 博客维护停止,需要的伙伴们移步http://blog.csdn.net/panhouye
两个博客的维护着实费心,方便大家共同学习.督促.进步.感兴趣的伙伴们移步CSDN博客:http://blog.csdn.net/panhouye,博客目录如下: 1.Android中通过实现线程更新P ...
- 模型评估——ROC、KS
无论是利用模型对信用申请人进行违约识别,还是对授信申请人进行逾期识别……在各种各样的统计建模中,永远必不可少的一步是对模型的评价,这样我们就可以根据模型评价指标的取值高低,来决定选取哪个模型.本篇主要 ...
- MyBatis 分页之拦截器实现
分页是WEB程序中常见的功能,mybatis分页实现与hibernate不同,相比hibernate,mybatis实现分页更为麻烦.mybatis实现分页需要自己编写(非逻辑分页RowBounds) ...
- spring-boot-2.0.3启动源码篇二 - run方法(一)之SpringApplicationRunListener
前言 Springboot启动源码系列还只写了一篇,已经过去一周,又到了每周一更的时间了(是不是很熟悉?),大家有没有很期待了?我会尽量保证启动源码系列每周一更,争取不让大家每周的期望落空.一周之中可 ...