首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SqlCommandBuilder With Convert语句

SqlCommandBuilder With Convert语句
EN

Stack Overflow用户
提问于 2015-07-10 22:17:12
回答 1查看 159关注 0票数 0

我有一个用.NET语言构建的应用程序。

在此应用程序中,我们主要对数据库(SQL Server 2005)进行读/写操作。有时(对于单个输入)我只使用SQL查询,例如:

代码语言:javascript
复制
commandText = "INSERT INTO Test_Table (Number) VALUES ('10')";
command = new System.Data.SqlClient.SqlCommand(commandText, connection);
command.ExecuteNonQuery();

如果我想要更新数据库中的一组记录,我使用SqlCommandBuilder类,如下例所示:

代码语言:javascript
复制
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");

这些效果很好。但是现在,由于某些原因,我需要插入/更新datetimes并对其使用CONVERT函数。

单个SQL查询可以很好地工作:

代码语言:javascript
复制
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脚本来实现相同的功能。我可以将所有内容更改为单查询,但这将需要一周的时间。

我已经尝试过以下几种方法,但都没有成功:

代码语言:javascript
复制
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");
EN

回答 1

Stack Overflow用户

发布于 2015-07-10 22:53:41

这行代码很奇怪:

代码语言:javascript
复制
dataset.Tables["Example"].Rows[0].["DateTime"] = "CONVERT(datetime,'" + t.toString() + "',103);

它能编译吗?具体地说,这是:

代码语言:javascript
复制
.Rows[0].["DateTime"] 

我认为应该是:

代码语言:javascript
复制
.Rows[0]["DateTime"] 

但是考虑到语法...我不认为这是正确的方式。datatable (在dataset中)需要一个datetime对象(顺便说一句,不要按数据类型命名属性,这会造成混淆),而您为它提供的内容是不兼容的。Sytem.DateTime.Now返回一个DateTime对象,然后将其与string连接起来(同样,这会编译吗?)我假设您希望它被注入到INSERT语句中?

既然您说需要一周的时间来更改所有内容,那么我假设您有很多类似的代码需要修复。我看到了三种可能的解决方案,都需要一些工作:

  1. 创建数据库触发器

https://msdn.microsoft.com/en-us/library/ms189799.aspx

  1. 将默认值添加到数据库中的DateTime字段,并从select查询中删除DateTime。

http://www.w3schools.com/sql/sql_default.asp

https://www.youtube.com/watch?v=INfi7jkdXC8 (2:00左右开始观看)

  1. 您可以编写一个函数来替换实际的文本,但这可能会变得很棘手:

dasdas作为

代码语言:javascript
复制
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
    }

诚然,这三个都需要努力,而且不是真正的“优雅”。我会选择第二种方案,因为它看起来工作量较少。但我不知道这是否能解决你的问题..

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31343113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档