【发布时间】:2015-08-09 23:27:12
【问题描述】:
我在数据库中创建新表时遇到了一个小问题。我在我的DataSet 对象中创建了一个新表,但该表不是在物理数据库中创建的。该表仅在缓存中创建。为什么?
我的代码:
SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Projects\ConsoleApplication6\ConsoleApplication6\Data.sdf");
SqlCeDataAdapter sCEdata = new SqlCeDataAdapter("select * from [Cats]", con);
DataSet ds = new DataSet();
sCEdata.Fill(ds);
DataColumn ID = new DataColumn("ID", typeof(int));
ID.AllowDBNull = false;
ID.AutoIncrementSeed = 0;
ID.AutoIncrement = true;
ID.AutoIncrementStep = 1;
ID.ReadOnly = true;
ID.Unique = true;
DataColumn Name = new DataColumn("Name", typeof(string));
DataColumn Owner = new DataColumn("Owner", typeof(string));
DataColumn Note = new DataColumn("Note", typeof(string));
DataTable Cats2 = new DataTable("Cats2");
Cats2.Columns.AddRange(new DataColumn[]{ID, Name, Hozain, Note});
DataRow dr1 = Cats2.NewRow();
DataRow dr2 = Cats2.NewRow();
DataRow dr3 = Cats2.NewRow();
dr1["Name"] = "Pavel"; dr1["Owner"] = "Sergey"; dr1["Note"] = "Starii";
dr2["Name"] = "Gleb"; dr2["Owner"] = "Inga"; dr2["Note"] = "Tupaya";
dr3["Name"] = "Dusia"; dr3["Owner"] = "Olga"; dr3["Note"] = "Zlaya";
Cats2.Rows.Add(dr1);
Cats2.Rows.Add(dr2);
Cats2.Rows.Add(dr3);
dr2["Note"] = "Guzelle";
ds.Tables.Add(Cats2);
SqlCeCommandBuilder build = new SqlCeCommandBuilder(sCEdata);
sCEdata.Update(ds);
【问题讨论】:
-
数据集不这样做。
-
在没有任何有效的 Sql 命令的情况下,您如何期望数据库知道您正在创建的内容,而且您只是在执行一个 Select,它将数据返回到一个对象而不是 Create .. Create Table 命令在哪里。 .?我认为您需要重新考虑您的方法并写下您想要做什么的步骤.. 还要查看如何在 sql 中使用 CreateTable 命令
-
这里是开始阅读的好地方@polyakov_s stackoverflow.com/questions/1348712/…
-
我认为,DataAdapter 仅使用 DataSet 对象更新物理数据库。例如,我在不使用 sql 命令的情况下在表中添加新行,并且它可以正常工作。对不起,我来自俄罗斯,用英文写得不好,但理解))