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的更多相关文章

  1. 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 ...

  2. 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 ...

  3. UAP开发错误之The given System.Uri cannot be converted into a Windows.Foundation.Uri(windows phone背景更换)

    今天博主在开发一款windows phone应用时,希望实现app背景的更换,思路很简单.使用ApplicationDataContainer容器存储我的图片路径,每次载入应用时读取这个路径以决定我用 ...

  4. mongodb c++ driver(2.53)windows编译

    编译环境: (1) 下载python2.7, 使用x86_32位,因为scons只有32位安装包可用: (2) 下载scons2.3.0,The current production release ...

  5. MongoDB C Driver Building on Windows

    一.编译mongodb c driver: 需要先安装OpenSSL:(参见:http://bbs.aircheng.com/read-2222-1) 步骤:(MongoDB步) 1.下载Active ...

  6. System Operations on AWS - Lab 4W - Monitoring (Windows)

    创建Web Server实例,配置CloudWatch来收集Web Server的系统日志,当错误登录次数达到设定值时触发报警 1. 创建Web Server 1.1 创建一个IAM策略 1.2 创建 ...

  7. Fail to start neutron-server

    问题: [root@localhost ~]# systemctl status neutron-server ● neutron-server.service - OpenStack Neutron ...

  8. openstack学习之neutron ml2初始化代码分析

    这里没有 去详细考虑neutron server怎么初始化的,而是直接从加载插件的地方开始分析.首先我们看下下面这个文件. Neutron/api/v2/router.py class APIRout ...

  9. System Error Codes

    很明显,以下的文字来自微软MSDN 链接http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx M ...

随机推荐

  1. WITH RECOMPILE和OPTION(RECOMPILE)区别

    在考虑重编译T-SQL(或者存储过程)的时候,有两种方式可以实现强制重编译(前提是忽略导致重编译的其他因素的情况下,比如重建索引,更新统计信息等等), 一是基于WITH RECOMPILE的存储过程级 ...

  2. Linux 磁盘告警分析

    硬件配置 cat /etc/redhat-release && dmidecode -s system-product-name && cat /proc/cpuinf ...

  3. PHP画矩形,椭圆,圆,画椭圆弧 ,饼状图

    1:画矩形: imagerectangle ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $col ) imagere ...

  4. javascript 最全面的数组操作合集

    一.数组添加.删除.替换.截取操作 1.arr.unshift(1) 在数组头部添加一个元素 1 (直接改变原数组,返回值为添加元素后数组的length) 2.arr.shift() 在数组的头部删除 ...

  5. Django--文件上传和下载,自测试可用

    html <div class="form-group col-sm-offset-2 col-sm-10"> <label for="exampleI ...

  6. (剑指Offer)面试题45:圆圈中最后剩下的数字

    题目: 0,1,...n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字,求出这个圆圈里剩下的最后一个数字. 思路: 1.环形链表模拟圆圈 创建一个n个节点的环形链表,然后每次在 ...

  7. 博客维护停止,需要的伙伴们移步http://blog.csdn.net/panhouye

    两个博客的维护着实费心,方便大家共同学习.督促.进步.感兴趣的伙伴们移步CSDN博客:http://blog.csdn.net/panhouye,博客目录如下: 1.Android中通过实现线程更新P ...

  8. 模型评估——ROC、KS

    无论是利用模型对信用申请人进行违约识别,还是对授信申请人进行逾期识别……在各种各样的统计建模中,永远必不可少的一步是对模型的评价,这样我们就可以根据模型评价指标的取值高低,来决定选取哪个模型.本篇主要 ...

  9. MyBatis 分页之拦截器实现

    分页是WEB程序中常见的功能,mybatis分页实现与hibernate不同,相比hibernate,mybatis实现分页更为麻烦.mybatis实现分页需要自己编写(非逻辑分页RowBounds) ...

  10. spring-boot-2.0.3启动源码篇二 - run方法(一)之SpringApplicationRunListener

    前言 Springboot启动源码系列还只写了一篇,已经过去一周,又到了每周一更的时间了(是不是很熟悉?),大家有没有很期待了?我会尽量保证启动源码系列每周一更,争取不让大家每周的期望落空.一周之中可 ...