怎樣檢測網路中的電腦是否有安裝SQL 2000
來源:互聯網
上載者:User
引用SQL DMO組件
//取得本區域網路內所有可用sql伺服器名
cmbServer.Items.Clear();
try
{
SQLDMO.Application app = new SQLDMO.ApplicationClass();
SQLDMO.NameList list = app.ListAvailableSQLServers();
int iCount = list.Count;
for(int i = 0; i < iCount; i ++)
{
string sTemp = list.Item(i);
if(sTemp != null)
cmbServer.Items.Add(sTemp);
}
}
catch
{
//如果取得SQLDMO組件出錯, 則預設把本機名寫進去
MessageBox.Show("無法取得伺服器列表,可能是缺少SDLDMO.DLL!");
cmbServer.Items.Add(System.Net.Dns.GetHostName());
}
為什麼我用panyee(快樂王子)的那個例子一直出現“無法取得伺服器列表,可能是缺少SDLDMO.DLL”,我有這個檔案啊!
如果用“http://xml.sz.luohuedu.net/xml/ShowDetail.asp?id=BCEAADFB-CFF3-4804-B3B3-6C7D6488982B”裡的例子也不行會出現以下資訊:
"未處理的“System.InvalidCastException”類型的異常出現在WindowsApplication1.exe 中
其他資訊:介面 SQLDMO.NameList 的 QueryInterface 失敗。
怎麼回事,請高手幫幫忙啊!
第一,你的sql server 版本不夠。
如果要使用SQLDMO.DLL就要去下載SQL sp2.
第二,如果你想列出區域網路內的所有的SQl server
建議你用Sql server內建的 isql.exe 這個檔案只要是sql server 6.5以上就可以了
下面是源碼:
string fileName = "C:\\Program Files\\Microsoft SQL Server\\80\\Tools\\Binn\\isql.exe";
if(System.IO.File.Exists(fileName))
{
System.Diagnostics.ProcessStartInfo processStartInfo = new System.Diagnostics.ProcessStartInfo(fileName,"-L");
processStartInfo.UseShellExecute = false;
processStartInfo.CreateNoWindow = true;
processStartInfo.RedirectStandardOutput = true;
processStartInfo.RedirectStandardError = true;
System.Diagnostics.Process process = System.Diagnostics.Process.Start(processStartInfo);
process.WaitForExit();
cboServerList.Items.Clear();
int line = 1;
string server = null;
while(process.StandardOutput.Peek() > -1)
{
server = process.StandardOutput.ReadLine().Trim();
line +=1;
if ( line > 6)
{
cboServerList.Items.Add(server);
}
server = null;
}
}
cboServerList.Items.Remove(System.Environment.MachineName);
cboServerList.Items.Add("localhost");
cboServerList是一個ComoBox
你可以現在cmd中輸入isql.exe -? 看看參數序列中有沒有你想要的
至於說列出區域網路內的sql server 要輸入 isql -L就可以了
private void cmbDatabase_Enter(object sender, System.EventArgs e)
{
//取得某伺服器上的各個表名
string strServer = cmbServer.Text;
string strUid = txtUid.Text;
if(strServer.Trim() != "" && strUid.Trim() != "")
{
string strPwd = txtPwd.Text;
string strConn = "server=" + strServer + ";database=master;uid=" + strUid + ";pwd=" + strPwd;
SqlConnection conn = null;
try
{
conn = new SqlConnection(strConn);
string strSQL = "select * from sysdatabases order by dbid";
SqlDataAdapter cmd = new SqlDataAdapter(strSQL, conn);
DataSet ds = new DataSet();
cmd.Fill(ds, "Databases");
cmbDatabase.Items.Clear();
for(int i = 0; i < ds.Tables["Databases"].Rows.Count; i ++)
{
string strDb = ds.Tables["Databases"].Rows[i]["name"].ToString();
cmbDatabase.Items.Add(strDb);
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
if(conn.State == ConnectionState.Open)
conn.Close();
}
}
this.Cursor = Cursors.Default;
}