我正在寻找以下解决方案:
找到一个格式正确的连接字符串到用作嵌入式资源的 SQL Server 精简版文件 (.sdf),其中包含 WPF 应用程序中的引用(即只读)数据。
注意:请注意将操作字[ Build Action ]设置为“ Embedded Resource ”和“ Do Not Copy ”到输出目录设置。这意味着文件不会作为独立实体物理复制到目标计算机,而是嵌入在应用程序可执行文件中。
到目前为止,我已经测试了一个解决方案,该解决方案允许使用简单的代码片段(清单 1)从嵌入式资源中获取 .sdf 文件:
清单 1。
Assembly _execAssembly = Assembly.GetExecutingAssembly();
// helper snippet to find out all available embedded resource names
string[] _resources = _execAssembly.GetManifestResourceNames();
//.sdf included in IO.Stream
System.IO.Stream _stream
= Assembly.GetExecutingAssembly().GetManifestResourceStream("MyAssemblyName.App_Data.MyDB.sdf");
...需要其余代码将 _stream
对象转换为 .sdf 并使用DataSet/TableAdapter
或System.Data.SqlServerCe
对象连接到该文件;SqlCeConnection
, SqlCeCommand
,SqlCeDataReader
如以下示例代码片段所示(清单 2):
清单 2。
#region private: Get DataTable using SqlCeDataReader
/// <summary>
/// Get DataTable using SqlCeDataReader
/// </summary>
/// <param name="strConn">string</param>
/// <param name="strSQL">string</param>
/// <returns>DataTable</returns>
private static DataTable GetDataTableFromFileCeReader(string strConn, string strSQL)
{
try
{
using (SqlCeConnection _connSqlCe = new SqlCeConnection(strConn))
{
using (SqlCeCommand _commandSqlCe = new SqlCeCommand())
{
_commandSqlCe.CommandType = CommandType.Text;
_commandSqlCe.Connection = _connSqlCe;
_commandSqlCe.CommandText = strSQL;
_connSqlCe.Open();
using (SqlCeDataReader _drSqlCe = _commandSqlCe.ExecuteReader()) {
DataTable _dt = new DataTable();
_dt.Load(_drSqlCe);
_connSqlCe.Close();
return _dt;
}
}
}
}
catch { throw; }
}
#endregion
谢谢并恭祝安康。