代码给你 static void Main(string[] args) { // Retrieve the enumerator instance and then the data SqlDataSourceEnumerator instance =SqlDataSourceEnumeratorInstance; SystemDataDataTable table = instanceGetDataSources(); // Display the contents of the table DisplayData(table); ConsoleWriteLine("Press any key to continue"); ConsoleReadKey(); } private static void DisplayData(SystemDataDataTable table) { foreach (SystemDataDataRow row in tableRows) { foreach (SystemDataDataColumn col in tableColumns) { ConsoleWriteLine("{0} = {1}", colColumnName, row[col]); } ConsoleWriteLine("==="); } }
程序运行界面如下:
服务器列表中是局域网中所有的 SQL SERVER 服务器,选择服务器后输入用户名和密码,下拉数据库列表,程序会列出此服务器中的所有数据库
程序源代码如下:
unit SqlServers;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ComCtrls , SQLDMO_TLB;//注意别忘了引入此文件
type
TdmoObject = record
SQL_DMO : _SQLServer;
lConnected : boolean;
end;
type
TFormServersList = class(TForm)
Label1: TLabel;
Label2: TLabel;
CB_ServerNames: TComboBox;
CB_DataNames: TComboBox;
Label3: TLabel;
Label4: TLabel;
Ed_Login: TEdit;
Ed_Pwd: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure CB_DataNamesDropDown(Sender: TObject);
private
server_Names : TStringList;
//对象集合
PdmoObject : array of TdmoObject;
//获取所有的远程服务器
Function GetAllServers(ServerList : TStringList) : Boolean;
{Private declarations}
public
{Public declarations}
end;
var
FormServersList: TFormServersList;
implementation
{$R DFM}
{TForm1}
Function TFormServersListGetAllServers(ServerList : TStringList) : Boolean;
var
sApp : _Application ;
sName : NameList;
iPos : integer;
begin
Result := True ;
try
sApp := CoApplication_Create ; //创建的对象不用释放,delphi 自己会释放
sName := sAppListAvailableSQLServers;
except
Result := False;
Exit;
end;
if sNameCount > 0 then // 之所以 iPos 从1开始,是因为0 位置为空值即 ' '
for iPos := 1 to sNameCount - 1 do
begin
CB_ServerNamesItemsAdd(sNameItem(iPos));
ServerListAdd(sNameItem(iPos));
end;
end;
procedure TFormServersListFormCreate(Sender: TObject);
var
lcv : integer;
begin
server_Names := TStringListCreate;
if not GetAllServers(server_Names) then
begin
ApplicationMessageBox('无法获取服务器列表,可能缺少客户端DLL库函数','错误提示',MB_OK);
exit;
end;
for lcv := 0 to server_NamesCount - 1 do
begin
SetLength(PdmoObject,lcv + 1);
with PdmoObject[lcv] do
begin
SQL_DMO := CoSQLServerCreate;
SQL_DMOName := Trim(server_Names[lcv]);
//登陆安全属性,NT 身份验证
SQL_DMOLoginSecure := false;
// 设置一个连接超时
SQL_DMOLoginTimeout := 3;
//自动重新登陆,如果第一次失败后
SQL_DMOAutoReconnect := true;
SQL_DMOApplicationName := server_Names[lcv];
lConnected := false;
end;
end;
end;
procedure TFormServersListFormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
server_NamesFree;
end;
procedure TFormServersListFormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := CaFree;
end;
procedure TFormServersListFormShow(Sender: TObject);
begin
if CB_ServerNamesItemsCount > 0 then //列举所有服务器名字
CB_ServerNamesText := CB_ServerNamesItemsStrings[0];
end;
procedure TFormServersListBitBtn2Click(Sender: TObject);
begin
Close ;
end;
procedure TFormServersListCB_DataNamesDropDown(Sender: TObject);
var
icount ,Server_B : integer;
begin
CB_DataNamesClear;
ScreenCursor := CrHourGlass;
Server_B := CB_ServerNamesItemsIndexOf(CB_ServerNamesText) ;
with PdmoObject[Server_B]SQL_DMO do
begin
if not PdmoObject[Server_B]lConnected then
try
Connect(Name,Trim(Ed_LoginText),Trim(Ed_PwdText));
except
ScreenCursor := CrDefault ;
ApplicationMessageBox('请检查用户名或密码是否正确','连接失败',MB_OK);
Exit ;
end;
if not VerifyConnection(SQLDMOConn_ReconnectIfDead) then
begin
ShowMessage('在试图连接到SQL SERVER 2000 时出现错误' + #10#13 +
'确信是否加在了动态连接库SQLDMODLL');
exit;
end else
PdmoObject[Server_B]lConnected := True ;
DatabasesRefresh(true);
for icount := 1 to DatabasesCount do
CB_DataNamesItemsAdd(DatabasesItem(icount,null)name);
end;
ScreenCursor := CrDefault ;
end
end
以上就是关于c# 得到局域网中可用SqlServer服务器列表全部的内容,包括:c# 得到局域网中可用SqlServer服务器列表、如何获取局域网中的所有 SQL Server 服务器、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)