任何人都可以在下面的代码中解释我的错误:
DataTable dt=SmoApplication.EnumAvailableSqlServer(true);
Server sr = new Server("Test");
foreach(DataBase db in sr.DataBases)
{
Console.WriteLine(db["name"]);
}
它在sr.Databases
中提供了一个无法连接的例外。
答案 0 :(得分:9)
请查看以下可能有用的链接:
或者您可以将代码更改为:
DataTable dt = SmoApplication.EnumAvailableSqlServers(false);
if (dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
Console.WriteLine(dr["Name"]);
}
}
希望这能解决你的问题。
答案 1 :(得分:6)
您是否拥有实例名称为 Test 的SQL Server?如果没有,那就是你的问题。
看起来您正在尝试枚举所有本地SQL Server实例。如果是这样,这段代码将起作用:
DataTable dt = SmoApplication.EnumAvailableSqlServers(true);
foreach (DataRow dr in dt.Rows)
{
Console.WriteLine(dr["Name"]);
Console.WriteLine(" " + dr["Server"]);
Console.WriteLine(" " + dr["Instance"]);
Console.WriteLine(" " + dr["Version"]);
Console.WriteLine(" " + dr["IsLocal"]);
}
答案 2 :(得分:2)
以防万一标题错误,即他想在特定情况下找到数据库:
using System;
using Microsoft.SqlServer.Management.Smo;
using System.Data;
using System.Windows.Forms;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
Server sr = new Server("MACHINE_NAME\\INSTANCE_NAME");
try
{
foreach (Database db in sr.Databases)
{
Console.WriteLine(db.Name);
}
Console.Read();
}
catch (Exception Ex)
{
MessageBox.Show(Ex.ToString());
}
}
}
}
Else Lucas Aardvark的回答是最恰当的。
答案 3 :(得分:1)
using Microsoft.Win32;
RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server");
String[] instances = (String[])rk.GetValue("InstalledInstances");
if (instances.Length > 0)
{
foreach (String element in instances)
{
Console.WriteLine(element); // element is your server name
}
}