繁体   English   中英

无法从解决方案资源管理器数据库填充DataGridView

[英]Unable to populate DataGridView from solution explorer DataBase

问题背景:

我已经开发了WinForm应用程序,并且现在正处于发布它的阶段。

我有一个SQL Server数据库,已将其添加到解决方案资源管理器的文件夹中,因为我希望将该数据库部署在应用程序中,如图所示;

在此处输入图片说明

在此数据集中,我添加了许多存储过程。

问题:

当我调试应用程序时, 填充DataGridView的代码段中提供以下连接字符串。

string connectionString = @"Data Source=.;Integrated Security=True;AttachDbFilename=|DataDirectory|\testDB.mdf";**

public override DataSet FillDataGrid()
{

    SqlConnection connection = new SqlConnection(connectionString);
    SqlDataAdapter dataadapter = new SqlDataAdapter("spListAll", connection);
    DataSet ds = new DataSet();
    connection.Open();
    dataadapter.Fill(ds, "results");
    connection.Close();

    int size = ds.Tables[0].Rows.Count;

    return ds;
}

如果我按照以下方式从本地存储在计算机上的数据库中提供连接字符串,则连接字符串可以完美地填充网格。

string connectionString = @"Data Source=DAVE-PC\FINAWARE; Initial Catalog=testDB; Integrated Security=SSPI;";

谁能告诉我如何正确设置此设置,以便可以在解决方案资源管理器文件夹中使用testDB.mdf?

显然您的数据源无效。

其他人与您有相同的问题,并使用.\\SQLEXPRESS作为数据源。

似乎还需要在连接字符串中添加User Instance = true 更多文档

对于类似问题,这里我如何连接到MDF数据库文件?

当然,我假设无论运行应用程序的计算机是SQL Server之前都已安装。 (或者至少您已经安装了LOCALDB版本的Sql Express 2012)

话虽如此,但请记住,根据应用程序的运行位置, DataDirectory替换字符串以不同的方式解析。

在Visual Studio(Winforms应用程序)下的调试会话中,DataDirectory解析为PROJECTFOLDER \\ BIN \\ DEBUG,并且数据库文件应该存在(为确保这一点,您可以将MDF文件“ Copy To The Output Directory的属性设置Copy To The Output Directory Copy Always or If Newer

在生产机器中,DataDirectory(始终用于winforms应用程序)位于安装应用程序的同一文件夹中,如果将应用程序安装在特殊的只读文件夹(例如C:\\program files (x86) )中,则对于数据库应用程序来说这是一个明显的问题C:\\program files (x86)

幸运的是,可以更改DataDirectory替换字符串的位置。 在尝试使用任何与数据访问相关的代码之前,请添加以下行

string dataPath = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
dataPath = Path.Combiner(dataPath, "MyAppDataFolder");
AppDomain.CurrentDomain.SetData("DataDirectory", dataPath);

通常,安装包应在CommonApplicationData文件夹中创建MyAppDataFolder并将其复制到MDF文件中。 推荐这样做是因为您具有读/写权限,并且同一台计算机上的其他用户可以使用您的应用程序

作为附带说明,我看到了如何调用存储过程的另一个问题(尽管如果更改连接字符串,我无法解释为什么它可以工作)。 您应该告诉适配器您正在使用存储过程,并设置

SqlDataAdapter dataadapter = new SqlDataAdapter("spListAll", connection);
dataadapter.SelectCommand.CommandType = CommandType.StoredProcedure;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM