我想创建一个连接到SQL Server然后列出所有数据库的简单工具,在用户选择其中一个数据库后,该工具将在其上执行一些SQL脚本。
下面是一个应该返回包含我所有数据库的DataTable
的方法;
我发送给它sqlServerIp
作为第一个参数,如10.10.20.30
ip地址而非服务器名称。
此外,我没有指定SQL Server实例。
private DataTable GetSqlServerDatabases(String sqlServer, bool isWindowsAuth, String login, String password)
{
String connectionString;
DataTable databases;
if (isWindowsAuth)
{
connectionString = "Data Source=" + sqlServer + ",1433;Network Library=DBMSSOCN; Integrated Security=True;";
}
else
{
connectionString = "Data Source=" + sqlServer + ",1433;Network Library=DBMSSOCN;" + "User id=" + login + ";Password=" + password + ";";
}
try
{
using (var con = new SqlConnection(connectionString))
{
con.Open();
databases = con.GetSchema("Databases");
foreach (DataRow database in databases.Rows)
{
String databaseName = database.Field<String>("database_name");
short dbID = database.Field<short>("dbid");
DateTime creationDate = database.Field<DateTime>("create_date");
}
}
}
catch(Exception ex)
{
databases = null;
MessageBox.Show(ex.Message.ToString());
}
return databases;
}
当我尝试在多个服务器上调用该方法时,我遇到了异常:
登录失败。登录来自不受信任的域,不能与Windows身份验证一起使用。
或
建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。
我在SO和网站上搜索后使用了Network Library=DBMSSOCN;
的连接字符串,所以我不知道这种方法有什么问题。