我有以下代码:
string dbfile = "C:\\Users\\Ralph\\Documents\\Visual Studio 2012\\Projects\\WorksTimes\\WorksTimes\\Database.sdf";
SqlCeConnection connection = new SqlCeConnection("datasource=" + dbfile);
connection.Open();
DataSet data = new DataSet();
DataTable dt = new DataTable("Table2");
dt.Columns.Add(new DataColumn("ID", typeof(int)));
dt.Columns.Add(new DataColumn("Name", typeof(string)));
data.Tables.Add(dt);
SqlCeDataAdapter adapter = new SqlCeDataAdapter("select * from [Table2]", connection);
if (data != null && data.Tables.Count > 0)
{
System.Diagnostics.Debug.WriteLine("Test");
DataRow dr = data.Tables["Table2"].NewRow();
dr["ID"] = 0;
dr["Name"] = "Jan";
data.Tables["Table2"].Rows.Add(dr);
data.Tables["Table2"].Rows.Add(new object[] { 1, "Jan" });
System.Diagnostics.Debug.WriteLine(data.Tables["Table2"].Rows.Count);//returns 2
adapter.Fill(data);
adapter.Update(data);
connection.Close();
}
当我检查数据库文件时,它仍然是空的。 为什么不在我的数据库文件中添加行的代码?
答案 0 :(得分:0)
Update命令将更新现有行 - 但您似乎尝试插入新行,这将是.Insert方法的任务(而不是.Update()).... - marc_s 16分钟前
谢谢,看起来我正在使用错误的东西尝试获取数据库中的行。
答案 1 :(得分:0)
说实话,我并不完全确定为什么你的代码不会抛出异常而只是默默地做什么。
以下是我可能会这样做的一个例子。我测试了它,数据最终在* .sdf。
string dbfile = yourDbFile;
using (var connection = new SqlCeConnection("datasource=" + dbfile))
{
using (var adapter = new SqlCeDataAdapter("select * from [Table2]", connection))
{
using (var builder = new SqlCeCommandBuilder(adapter))
{
// The CommandBuilder automatically builds INSERT, UPDATE
// and DELETE statements from the given SELECT statement.
// otherwise, these commands would need to be specified
// manually.
builder.RefreshSchema();
using (var data = new DataSet())
{
// Fill() opens the connection if necessary
adapter.Fill(data);
// The "table", i.e. the result of the select statement,
// does *not* have the name "Table2".
// To reduce confusion, just work with the "table"
// at index 0.
var dr = data.Tables[0].NewRow();
dr["ID"] = 0;
dr["Name"] = "Jan";
data.Tables[0].Rows.Add(dr);
data.Tables[0].Rows.Add(new object[] { 1, "Jan" });
adapter.Update(data);
}
}
}
}
注意事项:
using
的对象时使用IDisposable
。CommandBuilder
从SELECT语句自动构建INSERT,UPDATE和DELETE语句,或手动创建相应的命令。Fill()
(和Update()
)方法会自动打开连接。您无需手动打开连接。您可能需要阅读Update方法以获取更多信息。