我写这篇文章是为了在本地机器上找到sql server实例:
using System;
using System.Data;
using Microsoft.SqlServer.Management.Smo;
namespace Application3
{
class Program
{
static void Main(string[] args)
{
string srvname = string.Empty; string srvnames = null;
DataTable dt = SmoApplication.EnumAvailableSqlServers(true);
Console.WriteLine("------------->" + dt.Rows.Count);
foreach (DataRow dr in dt.Rows)
{
try{
Console.WriteLine("-->Instance " + dr["name"]);
Server srv = new Server((string)dr["name"]);
foreach (Database db in srv.Databases)
Console.WriteLine(db.Name);
}catch(Exception e)
{
Console.writeLine(e.toString());
}
}
}
}
我的本地计算机中有3个实例
但它只显示2和3. 1没有显示。当我使用服务器对象连接时,它无法用于sql2k8express。
这是输出....
- >实例RK2K3-VM-SR \ SQLEXPRESS
主
模型
MSDB
tempdb
- >实例RK2K3-VM-SR \ SQL2K8EXPRESS
Microsoft.SqlServer.Management.Common.ConnectionFailureException:无法连接 等到服务器RK2K3-VM-SR \ SQL2K8EXPRESS。 ---> Microsoft.SqlServer.Management.Com mon.ConnectionFailureException:不支持此SQL Server版本(10.0)。 在Microsoft.SqlServer.Management.Common.ConnectionManager.CheckServerVersion (ServerVersion版) 在Microsoft.SqlServer.Management.Common.ConnectionManager.InternalConnect(Wi ndowsIdentity impersonatedIdentity) 在Microsoft.SqlServer.Management.Common.ConnectionManager.Connect() ---内部异常堆栈跟踪结束--- 在Microsoft.SqlServer.Management.Common.ConnectionManager.Connect() 在Microsoft.SqlServer.Management.Common.ConnectionManager.PoolConnect() 在Microsoft.SqlServer.Management.Common.ConnectionManager.get_ServerVersion( ) 在Microsoft.SqlServer.Management.Smo.ExecutionManager.get_ServerVersion() 在Microsoft.SqlServer.Management.Smo.SqlSmoObject.GetDbComparer(布尔inSe rver) 在Microsoft.SqlServer.Management.Smo.SqlSmoObject.InitializeStringComparer() 在Microsoft.SqlServer.Management.Smo.AbstractCollectionBase.get_StringCompar ER() 在Microsoft.SqlServer.Management.Smo.SimpleObjectCollectionBase.InitInnerCol 经文() 在Microsoft.SqlServer.Management.Smo.SmoCollectionBase.get_InternalStorage() 在Microsoft.SqlServer.Management.Smo.SmoCollectionBase.InitializeChildCollec (布尔刷新) 在Microsoft.SqlServer.Management.Smo.SmoCollectionBase.GetEnumerator() 在C:\ Documents和Settin中的ConsoleApplication3.Program.Main(String [] args) gs \ Administrator.APP \ Desktop \ ConsoleApplication3 \ Program.cs:第25行
我该如何解决这个问题?我的系统防火墙已禁用,所有sql服务都在运行。
答案 0 :(得分:3)
此代码以前是否为SQL 2005编写过? 如果是,你需要
在计算机上安装SQL 2008 +管理对象的SQL 2005向后兼容包。 (http://www.microsoft.com/downloads/details.aspx?FamilyID=b33d2c78-1059-4ce2-b80d-2343c099bcb4&displaylang=en)
删除对SLQ 2005和SDK的SDK dll的引用。重新参考SQL 2008的SK Dlls。 (http://msdn.microsoft.com/en-us/library/ms162129.aspx)
重建。
另请参阅:Application cannot find Microsoft.SQLServer.SMO on SQL 2008 machine