【问题标题】:SQL database connection failure in another computer through |DataDirectory|通过 |DataDirectory| 在另一台计算机上的 SQL 数据库连接失败
【发布时间】:2016-05-28 16:04:50
【问题描述】:

我有一个数据库和一个服务器应用程序,在我的计算机上运行时一切正常。

string ConnectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename='|DataDirectory|\Fabrica.mdf';Integrated Security=True;Connect Timeout=30";

问题是:我必须在另一台计算机上运行此应用程序,并且数据库也必须在那里,当服务器应用程序尝试访问数据库时,它什么也不返回。是不是认证有问题?文件路径?

@Edit:这是我访问表格的方式:

SqlConnection con = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = String.Format("SELECT * FROM {0}", Table);
string name;
SqlDataReader reader;
try
{
    con.Open();
    reader = cmd.ExecuteReader();
    while (reader.Read())
    {
        name = reader["Name"].ToString();
    }
    con.Close();
}
catch (Exception e)
{
    MessageBox.Show(e.ToString());
}

@Edit:我不知道这是否有帮助,但我在另一台计算机上安装了 SQL Server LocalDB 和 SQL Server Express。

【问题讨论】:

  • 检查异常,确保您在正确的文件夹中有 Fabrica.mdf 并安装了 SQL Server localDb
  • 首先打开 SQL Server 附带的 SQL Server Management Studio (SMSS)。登录窗口有一个服务器实例。确保您的应用程序使用相同的实例名称。然后使用 SMSS 浏览器打开数据库选项卡并检查服务器上数据库的名称。不要在连接字符串中使用 mdf 文件名。它不是必需的,可能会导致凭据问题。
  • @AdilAhamed 我试过了,没有例外。
  • @jdweng 一切正常,但仍然无法正常工作
  • 我很确定连接字符串是错误的。请再次阅读 jdweng 的评论。如果您能够打开 SMSS 并看到您的 sql server 实例的名称,并且您能够连接到它,则问题出在连接字符串中。有时防火墙或防病毒软件会阻止连接。

标签: c# sql connection localdb


【解决方案1】:

授权和文件路径都很重要。

LocalDB 安装在计算机 A 和 LocalDB 中,SQL Sever Express 安装在计算机 B(服务器)中?

LocalDB 是“本地”这个名称的意思。这意味着如果您想移动到另一台计算机,则必须将 LocalDB 重新本地化到计算机 B。

手动方式很复杂,您必须将 LocalDB 从计算机 A 中的 LocalDB 服务器中分离出来(必须提前完成 ALTER DATABASE IMMEDIATE ROLLBACK),并将 LocalDB 文件复制到计算机 B 并将 LocalDB 文件附加到计算机 B 中的 LocalDB 服务器。并且 attachDBfilepath 应指示正确的路径。 |数据目录|是服务器应用程序的数据目录,而不是服务器应用程序的执行目录。 重要的是,由于 LocalDB 的所有权,需要进行分离和附加过程。

我建议使用自动方式将 LocalDB .mdf 文件添加到您的服务器应用程序项目中,并确保属性为“内容”和“如果较新则复制”或“始终复制”,而不是上述复杂的手动方式。使用自动提供的连接字符串,但只需将部分更改为 |DataDirectory|。如果部署Server应用程序,LocalDB也会被部署到Server应用程序的数据目录中,LocalDB的所有权将自动更改为计算机B。

我不确定您是如何使用 |DataDirectory| 使应用程序在计算机 A 中正常工作的并希望建议您了解 LocalDB 的性质和 |DataDirectory| 的含义和连接字符串。

根据我的困难经验,这是我个人的看法,如果您使用 |DataDirectory|,您只能读取(选择)但您将无法插入(修改)数据。这意味着我们需要在将 LocalDB 添加到项目以用作 |DataDirectory| 之前设置(插入)所有数据。

作为参考,我的情况是我设置(插入)已经将大数据固定到 LocalDB 并在部署之前将其添加到项目中,并且我对我的应用程序进行了编码以在部署后为插入(修改)功能创建一个新的另一个 LocalDB。

另外,请参考我对别人的回答。
Not inserting data into database and not getting any error

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2019-06-06
    • 2013-10-15
    • 1970-01-01
    相关资源
    最近更新 更多