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

C# 通过| DataDirectory在另一台计算机中连接SQL数据库失败|,c#,sql,connection,localdb,C#,Sql,Connection,Localdb,我有一个数据库和一个服务器应用程序,当我在我的计算机上运行它时,一切正常 string ConnectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename='|DataDirectory|\Fabrica.mdf';Integrated Security=True;Connect Timeout=30"; 问题是:我必须在另一台计算机上运行这个应用程序,数据库也必须在那里,当服务器应用程序试图访问数据库时,它不会返回任何结果。这是

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

string ConnectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename='|DataDirectory|\Fabrica.mdf';Integrated Security=True;Connect Timeout=30";
问题是:我必须在另一台计算机上运行这个应用程序,数据库也必须在那里,当服务器应用程序试图访问数据库时,它不会返回任何结果。这是身份验证的问题吗?文件路径

@编辑:以下是我访问表的方式:

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());
}

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

授权和文件路径都很重要

string ConnectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename='|DataDirectory|\Fabrica.mdf';Integrated Security=True;Connect Timeout=30";
LocalDB安装在计算机A中,而LocalDB、SQL Server Express安装在计算机B(服务器)中

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

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

与上面复杂的手动方式不同,我建议使用自动方式将LocalDB.mdf文件添加到服务器应用程序的项目中,并确保属性为“content”和“copy if newer”或“copy always”。利用自动提供的connectionstring,但只需将部件更改为| DataDirectory |。如果部署服务器应用程序,则LocalDB也将部署到服务器应用程序的数据目录中,并且LocalDB的所有权将自动更改为计算机B

我不确定您是如何使应用程序在带有| DataDirectory |的计算机上正常工作的,我想建议您了解LocalDB的性质以及| DataDirectory |和connectionstring的含义

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

作为参考,我的案例是,我在部署之前将已经固定的大数据设置(插入)到LocalDB中,并将其添加到project中,然后对我的应用程序进行编码,以便在部署之后为插入(修改)函数创建另一个新的LocalDB

另外,请参考我对其他人的回答。

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