我正在通过服务器上的Web API REST方法检索数据并将它们插入到本地SQL Server CE表中。插入此数据的客户端代码(将检索到的数据(已插入到IEnumerable通用列表中,填充临时DataTable,然后批量移动到SQL Server CE数据库中),如下所示:
public static int BulkInsertDepartments(IEnumerable<Department> depts)
{
int countAdded = 0;
// Create temp table that mirrors Departments as a staging area for the data to be bulk copied
var dt = new DataTable();
dt.Columns.Add(new DataColumn("Id", typeof(Int32)));
dt.Columns.Add(new DataColumn("DeptNum", typeof(Int32)));
dt.Columns.Add(new DataColumn("DepartmentName", typeof(string)));
foreach (Department dept in depts)
{
try
{
dt.Rows.Add(dept.Id, dept.DeptNumber, dept.DeptName);
countAdded++;
}
catch (Exception ex)
{
MessageBox.Show(String.Format("deptId == {0}, deptNumber == {1}, deptName == {2} ({3})", dept.Id, dept.DeptNumber, dept.DeptName, ex.Message));
}
}
// Now move it all into the table
using (var bc = new SqlCeBulkCopy(dataSource))
{
bc.DestinationTableName = "Departments";
bc.WriteToServer(dt);
}
return countAdded;
}
我得到了我期望的返回值,但是在手持设备上的查询分析器中看不到SQL Server CE表:
正如您在上面的尖叫中所看到的,查询分析器中可以看到旧的SQL Server CE表(HHSDB.SDF),但新的(HHS.SDF)似乎不存在;但如果HHS.SDF数据库或其表[s]确实不存在,那么对WriteToServer()的调用是否会失败?实际上,不会这一行:
using (var bc = new SqlCeBulkCopy(dataSource))
......甚至在此之前就失败了?
那么为什么我的SQL Server CE表对查询分析器不可见?注意:这可能与讨论的问题here有关;在这种情况下,它是Visual Studio的服务器资源管理器,它似乎无法看到表。
另请注意,Windows资源管理器可以查看表格:
我知道这些表确实存在于手持设备上,因为以下方法返回了我期望的非零值:
public static int getLocalInvItemsCount()
{
int recCount;
using (var conn = new SqlCeConnection(dataSource))
{
var cmd = conn.CreateCommand();
cmd.CommandText = "SELECT COUNT(*) FROM InventoryItems";
conn.Open();
cmd.Prepare();
recCount = (int)cmd.ExecuteScalar();
cmd.Dispose();
}
return recCount;
}
如何查看表格及其数据?我希望能够进行“健全性检查”,通过观察其内容,按预期填充表格。
连接字符串是:
private const string sdfPath = @"\Program Files\hhs\HHS.sdf";
private static readonly string dataSource = String.Format("Data Source={0}", sdfPath);