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;
}
}
}
查看全文
相关阅读:
流程控制
数据类型和运算符
抽奖
蓝桥杯 第五届
python下编译py成pyc和pyo
Django中提示TemplateDoesNotExist?
Ubuntu16.04 apache2 wsgi 部署django
Ubuntu 14.04下Django+MySQL安装部署全过程
LVM原理及PV、VG、LV、PE、LE关系图
SQLServer2008-镜像数据库实施手册(双机)SQL-Server2014同样适用
原文地址:https://www.cnblogs.com/gwazy/p/111127.html
最新文章
linux rz sz 的安装
netbeans php环境搭建
nodejs的安装
fekit 搭建
Win7+Ubuntu12.04(EasyBCD硬盘安装)
sublime 快捷键
Linux下的终端快捷键
在 sublime text 3 中添加 Emmet (ZenCoding )
linux vim操作技巧
sudo免密码
热门文章
ubuntu安装rtx
linux 机器之间 zssh, rz, sz互相传输
ubuntu 安装google输入法
windows到ubuntu
linux Crontab 使用
继承和多态
抽象类和接口
猜拳游戏
数组和方法
String 类
Copyright © 2011-2022 走看看