我有一个用.NET语言构建的应用程序。
在这个应用程序中,我们主要读/写数据库(SQL Server 2005)。 有时(对于单个输入)我只使用SQL查询,例如:
commandText = "INSERT INTO Test_Table (Number) VALUES ('10')";
command = new System.Data.SqlClient.SqlCommand(commandText, connection);
command.ExecuteNonQuery();
如果我想更新数据库中的一堆记录,我使用SqlCommandBuilder
类,如下例所示:
adapter = new System.Data.SqlClient.SqlDataAdapter("SELECT * FROM Test_Table WHERE Number = '9'",connection);
commandbuilder = new System.Data.SqlClient.SqlCommandBuilder(adapter);
dataset = new System.Data.DataSet();
adapter.Fill(dataset,"Example");
dataset.Tables["Example"].Rows[0].["Number"] = 10;
adapter.update(dataset,"Example");
这些工作很棒。但是现在,出于某种原因,我需要插入/更新日期时间并在其上使用CONVERT
函数。
单个SQL查询效果很好:
t = System.DateTime.Now;
commandText = "INSERT INTO Test_Table (DateTime) VALUES (datetime, 't.toString()', 103)";
command = new System.Data.SqlClient.SqlCommand(commandText, connection);
command.ExecuteNonQuery();
这没有问题,但我不知道如何使用我的SqlCommandBuilder
脚本实现相同的功能。我可以将所有内容更改为单个查询,但这需要一周时间。
我已经尝试了以下内容,但没有成功:
t = System.DateTime.Now;
adapter = new System.Data.SqlClient.SqlDataAdapter("SELECT * FROM Test_Table WHERE Number = '9'", connection);
commandbuilder = new System.Data.SqlClient.SqlCommandBuilder(adapter);
dataset = new System.Data.DataSet();
adapter.Fill(dataset, "Example");
dataset.Tables["Example"].Rows[0].["DateTime"] = "CONVERT(datetime,'" + t.toString() + "',103);
adapter.update(dataset, "Example");
答案 0 :(得分:0)
这行代码很奇怪:
dataset.Tables["Example"].Rows[0].["DateTime"] = "CONVERT(datetime,'" + t.toString() + "',103);
编译吗?具体来说,这个:
.Rows[0].["DateTime"]
我认为应该是:
.Rows[0]["DateTime"]
但语法的问题......我不认为这是正确的方法。数据表(在数据集中)需要一个日期时间对象(顺便说一句,不要按照其数据类型命名属性,这会导致混淆),并且为它提供了不兼容的东西。 Sytem.DateTime.Now返回一个DateTime对象,然后你用字符串连接它(再次,这是编译?)我假设你期望它被注入到INSERT语句中?
既然你说需要一周的时间来改变一切,我认为你有很多类似的代码需要修复。 我看到三种可能的解决方案,都需要一些工作:
https://msdn.microsoft.com/en-us/library/ms189799.aspx
http://www.w3schools.com/sql/sql_default.asp
https://www.youtube.com/watch?v=INfi7jkdXC8 (在2点左右开始观看)
dasdas as
private string ChangeDate(string insertQuery)
{
// find the location of the date column
// replace the actual value with the "CONVERT(datetime,'" + actualValue + "',103)"
// return the new value and store it in the sqlcommandbuilder.insertstatement
}
不可否认,这三者都需要工作,并不是真正的优雅"。我会选择2,因为它似乎不那么重要。但我不知道这是否能解决你的问题..