【问题标题】:How to Connect to SQL Server Programmatically in C#?如何在 C# 中以编程方式连接到 SQL Server?
【发布时间】:2012-01-26 21:26:35
【问题描述】:

我开发了一个程序 (C#),它使用以下代码创建 SQL 数据库:

string SQLCreation = "IF NOT EXISTS (SELECT * FROM master..sysdatabases WHERE Name = 'x') CREATE DATABASE x";
SqlConnection PublicSQLDBCreationConnection = new SqlConnection(connectionString);
SqlCommand PublicSQLDBCreation = new SqlCommand(SQLCreation, PublicSQLDBCreationConnection);

try
{
   PublicSQLDBCreationConnection.Open();
   PublicSQLDBCreation.ExecuteNonQuery();
   PublicSQLDBCreationConnection.Close();
}
//'then creates a table and so on

现在我想要一个客户端应用程序连接到这个数据库(通过 LAN)而不使用 IP 或计算机名称。这怎么可能?是否有可能这样做并拥有一个数据集而不提及 IP Adr。还是计算机名?


附:别担心,我简化了我的代码只是为了你的观点,我确保不会发生 SQL 注入或其他尝试。 另外我不得不说我没有提到服务器名或 IP 的原因是我想在许多网络上大规模部署我的应用程序

【问题讨论】:

  • 如何告诉它服务器在哪里? “在第一个路由器左转,然后连接到右边的第三个 CAT-5 插孔?”
  • 没有 IP 或主机名就无法连接是什么意思? AFAIK 您必须将其中之一作为连接字符串的一部分。
  • 如果不指定它在哪台机器上,就无法直接连接到数据库。根据您的要求,您可以使用服务层或其他东西进行一些间接操作;您不能指定 IP 或计算机名称的要求/原因是什么?
  • 我发现您正在编写代码来创建数据库而不了解如何连接到 SQL Server,这很可怕。
  • 另外,看起来您可能会使用可能具有提升权限的帐户受到 SQL 注入攻击。

标签: c# sql visual-studio connection lan


【解决方案1】:

您可以使用SqlDataSourceEnumerator 获取所有可见和可浏览的 Sql Server 的列表。这不是一个好的技术,因为您可能会得到一个您无权在其上创建数据库的实例,但您仍然可以尝试使用它。

var enumerator = SqlDataSourceEnumerator.Instance;
foreach (DataRow row in enumerator.GetDataSources().Rows)
{
    var serverName = row["ServerName"];
    var instance = row["InstanceName"];

    // build a connection string and try to connect to it
}

【讨论】:

  • 当然 - 但最后,您还使用了服务器名称 - 您不必提前知道它,您可以从列表中选择它- 但您仍然使用服务器的名称来连接它
  • 我知道,但是用户不知道服务器名称,所以我认为这可能是 BShakiba 所要求的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
相关资源
最近更新 更多