SQL 在另一台计算机上通过 |DataDirectory| 连接数据库失败

SQL database connection failure in another computer through |DataDirectory|

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

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

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

@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。

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

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

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

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

我建议使用自动方式将 LocalDB .mdf 文件添加到您的服务器应用程序项目中,并确保 属性 是 'content' 和 'copy if newer',而不是上述复杂的手动方式或 'copy always'。使用自动提供的连接字符串,但只需将部分更改为 |DataDirectory|。如果部署服务器应用程序,那么 LocalDB 也将部署到服务器应用程序的数据目录中,并且 LocalDB 的所有权将自动更改为计算机 B。

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

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

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

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