我有一个数据库和一个服务器应用程序,当我在计算机上运行时,一切正常。
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。
答案 0 :(得分:1)
授权和文件路径都很重要。
LocalDB安装在计算机A和LocalDB中,SQL Sever Express安装在计算机B(服务器)中?
LocalDB就是这个名字' Local'手段。这意味着如果要移动到另一台计算机,则必须将LocalDB重新本地化为计算机B.
手动方式很复杂,您必须将LocalDB与计算机A中的LocalDB服务器分离(必须事先完成ALTER DATABASE IMMEDIATE ROLLBACK),并将LocalDB文件复制到计算机B并将LocalDB文件附加到计算机B中的LocalDB服务器.addDB文件路径应指示正确的路径。 | DataDirectory目录|是Server应用程序的数据目录,它不是Server应用程序的执行目录。 而且重要的是,由于LocalDB的所有权,需要分离和附加过程。
我建议使用自动方式将LocalDB .mdf文件添加到您的Server应用程序项目中,并确保该属性是“内容”,而不是使用上述复杂的手动方式。如果更新,则复制'或者'永远复制'。利用自动提供的连接字符串,只需将部件更改为| 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