当我不想更新数据库中的每一列时,使用DataAdapter.Update

时间:2013-10-16 20:55:42

标签: c# sql dataadapter

最终目标是创建一个包含所有自动化测试及其添加日期的数据库。我们使用DLL上的反射来获取每个项目,类和测试名称。我们将它保存到数据表中。从那里,我们想将它保存在数据库中。我们在数据库中有一个额外的字段,其默认sql值为GetDate()。如果我手动将值插入SQL,则会为我填充日期字段。我们的代码从反射中获取属性,我们对dataTable很满意。

我希望发生的是C#exe可以每天运行,任何新的测试都会被添加到SQL中,现有的测试以及sql生成的时间值将保持不变。我认为“更新”会很好用,因为我只想添加新的测试。

我填写我的数据表如下

DataRow workRow = dt.NewRow();
workRow["Project"] = testProject.GetName().Name;
workRow["TestName"] = method.Name;
workRow["Class"] = method.DeclaringType.Name;
dt.Rows.Add(workRow);

我尝试像这样更新数据库

SqlConnection cn = new SqlConnection("Data Source=SomeSqlServer;Initial    Catalog=TestTracking;Integrated Security=SSPI;Network Library=DBNMPNTW;");
SqlDataAdapter dataAdapter = new SqlDataAdapter("SELECT * from Tests", cn);;
SqlCommandBuilder cmdb = new SqlCommandBuilder(dataAdapter);
dataAdapter.Update(ds,"Tests");

这会返回无效的操作异常,因为我在SourceColumn Date的dataTable'tests'中缺少DataColumn Date。这是真的。我想忽略日期并让SQL填充它。

有没有人有关于如何解决这个问题的想法,或者通过使用不同的方法让它变得更好?

1 个答案:

答案 0 :(得分:0)

您可以更改SELECT字符串,以便仅从Tests中选择Project,TestName和Class。您还可以创建一个存储过程,根据您的3个参数更新测试表。