zoukankan
html css js c++ java
获取Sql服务器列表 (C#)
private
void
button1_Click_1(
object
sender, System.EventArgs e)
{
string
[] servers
=
DBGrep.SqlLocator.GetServers();
foreach
(
string
s
in
servers )
{
this
.listBox1.Items.Add(s);
}
}
类的代码
using
System;
using
System.Text;
using
System.Windows.Forms;
using
System.Runtime.InteropServices;
namespace
DBGrep
{
public
class
SqlLocator
{ [DllImport(
"
odbc32.dll
"
)]
private
static
extern
short
SQLAllocHandle(
short
hType, IntPtr inputHandle,
out
IntPtr outputHandle);
[DllImport(
"
odbc32.dll
"
)]
private
static
extern
short
SQLSetEnvAttr(IntPtr henv,
int
attribute, IntPtr valuePtr,
int
strLength);
[DllImport(
"
odbc32.dll
"
)]
private
static
extern
short
SQLFreeHandle(
short
hType, IntPtr handle);
[DllImport(
"
odbc32.dll
"
,CharSet
=
CharSet.Ansi)]
private
static
extern
short
SQLBrowseConnect(IntPtr hconn, StringBuilder inString,
short
inStringLength, StringBuilder outString,
short
outStringLength,
out
short
outLengthNeeded);
private
const
short
SQL_HANDLE_ENV
=
1
;
private
const
short
SQL_HANDLE_DBC
=
2
;
private
const
int
SQL_ATTR_ODBC_VERSION
=
200
;
private
const
int
SQL_OV_ODBC3
=
3
;
private
const
short
SQL_SUCCESS
=
0
;
private
const
short
SQL_NEED_DATA
=
99
;
private
const
short
DEFAULT_RESULT_SIZE
=
1024
;
private
const
string
SQL_DRIVER_STR
=
"
DRIVER=SQL SERVER
"
;
private
SqlLocator()
{}
public
static
string
[] GetServers()
{
string
[] retval
=
null
;
string
txt
=
string
.Empty;
IntPtr henv
=
IntPtr.Zero;
IntPtr hconn
=
IntPtr.Zero;
StringBuilder inString
=
new
StringBuilder(SQL_DRIVER_STR);
StringBuilder outString
=
new
StringBuilder(DEFAULT_RESULT_SIZE);
short
inStringLength
=
(
short
) inString.Length;
short
lenNeeded
=
0
;
try
{
if
(SQL_SUCCESS
==
SQLAllocHandle(SQL_HANDLE_ENV, henv,
out
henv))
{
if
(SQL_SUCCESS
==
SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(IntPtr)SQL_OV_ODBC3,
0
))
{
if
(SQL_SUCCESS
==
SQLAllocHandle(SQL_HANDLE_DBC, henv,
out
hconn))
{
if
(SQL_NEED_DATA
==
SQLBrowseConnect(hconn, inString, inStringLength, outString,
DEFAULT_RESULT_SIZE,
out
lenNeeded))
{
if
(DEFAULT_RESULT_SIZE
<
lenNeeded)
{
outString.Capacity
=
lenNeeded;
if
(SQL_NEED_DATA
!=
SQLBrowseConnect(hconn, inString, inStringLength, outString,
lenNeeded,
out
lenNeeded))
{
throw
new
ApplicationException(
"
Unabled to aquire SQL Servers from ODBC driver.
"
);
}
}
txt
=
outString.ToString();
int
start
=
txt.IndexOf(
"
{
"
)
+
1
;
int
len
=
txt.IndexOf(
"
}
"
)
-
start;
if
((start
>
0
)
&&
(len
>
0
))
{
txt
=
txt.Substring(start,len);
}
else
{
txt
=
string
.Empty;
}
}
}
}
}
}
catch
(Exception ex)
{
//
Throw away any error if we are not in debug mode
#if
(DEBUG)
MessageBox.Show(ex.Message,
"
Acquire SQL Servier List Error
"
);
#endif
txt
=
string
.Empty;
}
finally
{
if
(hconn
!=
IntPtr.Zero)
{
SQLFreeHandle(SQL_HANDLE_DBC,hconn);
}
if
(henv
!=
IntPtr.Zero)
{
SQLFreeHandle(SQL_HANDLE_ENV,hconn);
}
}
if
(txt.Length
>
0
)
{
retval
=
txt.Split(
"
,
"
.ToCharArray());
}
return
retval;
}
}
}
查看全文
相关阅读:
转!!MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)
转!!left join on and 与 left join on where的区别
swoole WebSocket 消息推送
基于swoole搭建聊天室程序
使用php+swoole对client数据实时更新(下)
使用php+swoole对client数据实时更新(上)
swoole实现websocket推送
PHP只显示姓名首尾字符,隐藏中间字符并用*替换
微信小程序 tp5上传图片
thinkphp 调用wsdl接口实例化SoapClient抛出异常
原文地址:https://www.cnblogs.com/gwazy/p/111127.html
最新文章
spring boot学习笔记2
Spring boot学习笔记
Spring中注入bean学习的总结
JMS学习以及jms的实现activeMq
mysql Lock wait timeout exceeded; try restarting transaction
MySQL substring:字符串截取 (转载)
Maven项目无法引入 Maven Dependencies Libraries 问题
mysql regexp用法
mysql 去重,跨表更新,跨表删除
mysql动态行转列
热门文章
pentaho cde popup弹出框口
pentaho cde 封装自定义图形控件,动态传参
数据库事务介绍
mysql访问连接过多
转!热加载和热部署
转!!java序列化
转!!SpringMVC与Struts2区别与比较总结
转!!Java代码规范、格式化和checkstyle检查配置文档
转!!java事务的处理
网上资料笔记总结!!数据库事务并发问题,锁机制和对应的4种隔离级别
Copyright © 2011-2022 走看看