为什么用UpdateCommand更新数据库不报错也不更新?

lovebaby 2008-01-29 02:05:21
数据库结构:
表名:NewsClass
字段名:ClassID,ClassName,ClassOrder
以下为测试代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class DateSet : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection Conn;
SqlDataAdapter SqlAdap;
Conn = new SqlConnection();
Conn.ConnectionString = System.Configuration.ConfigurationManager.AppSettings["SqlConnentionString"];

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM NewsClass ORDER BY ClassOrder", Conn);
DataSet ds = new DataSet();
da.Fill(ds, "NewsClass");
da.UpdateCommand = new SqlCommand("UPDATE NewsClass SET ClassOrder = 4 WHERE ClassID = 4", Conn);
da.Update(ds.Tables[0]);
}
}
...全文
291 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovebaby 2008-01-30
  • 打赏
  • 举报
回复
例子我知道,但接下来呢,怎么成功执行SQL语句呢
saucer 2008-01-30
  • 打赏
  • 举报
回复
SqlDataAdapter提供的命令是针对DataTable里的被改变的内容的

如果你要直接运行SqlCommand,别用SqlDataAdapter,直接生成你要的SqlCommand,然后执行它的方法,譬如ExecuteNonQuery
lovebaby 2008-01-30
  • 打赏
  • 举报
回复
这是我说的贴子,问题和我的问题基本一样,回答的人不少,但好象没有我想要的答复,至少我还没有明白.
http://topic.csdn.net/u/20071119/17/9316fdc5-5993-4720-a8e7-0d4ab5e28528.html
lovebaby 2008-01-30
  • 打赏
  • 举报
回复
其实我的问题和这个贴子很相似,或者说是一样的.
我想,既然SqlDataAdapter提供一系列诸如InsertCommand/UpdateCommand/DelCommand的属性,应该能够直接通过SQL语句来对数据库进行更新,而UPDATE NewsClass SET ClassOrder = 4 WHERE ClassID = 4就是一条完整的SQL语句,怎么让它通过SqlDataAdapter的UpdateCommand直接执行来进行更新数据呢?
我不清楚例子中的SQL语句,感觉好象是用到了存储过程,我不想用存储过程,只想简单的通过赋值UpdateCommand的SQL语句直接更新数据库.不知意思是否表达清楚了.
saucer 2008-01-30
  • 打赏
  • 举报
回复
在设置这个UpdateCommand之后,你就可以调用
da.Update(ds.Tables[0]);

注意,你需要设置参数,指定哪些作为where子句的字段,哪些作为需要更新的字段


譬如上面的例子中

cmd = new SqlCommand("UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName WHERE CustomerID = @oldCustomerID", conn);

更新的字段
cmd.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
cmd.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName");

主键的字段
parm = cmd.Parameters.Add("@oldCustomerID", SqlDbType.NChar, 5, "CustomerID");
parm.SourceVersion = DataRowVersion.Original;


lovebaby 2008-01-29
  • 打赏
  • 举报
回复
至于楼上提到的参考MSDN,在提问之前我就看过了,但它相应的例子应该是使用存储过程的,并且最后也只是到了da.UpdateCommand = cmd;
就没有了,再接下来呢,应该怎么做?
lovebaby 2008-01-29
  • 打赏
  • 举报
回复
通过SqlCommandBuilder builder = new SqlCommandBuilder(da);自动生成对应的UpdateCommand,这个我知道。只是我想知道SqlDataAdapter既然提供一系列诸如InsertCommand/UpdateCommand/DelCommand的属性,应该能够直接通过SQL语句来对数据库进行更新吧。换句话说,我想知道InsertCommand/UpdateCommand/DelCommand的真正用法,而不是通过SqlCommandBuilder builder = new SqlCommandBuilder(da);来生成数据库。
saucer 2008-01-29
  • 打赏
  • 举报
回复
上面的链接中有代码例子的

cmd = new SqlCommand("UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " +
"WHERE CustomerID = @oldCustomerID", conn);

cmd.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
cmd.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName");

parm = cmd.Parameters.Add("@oldCustomerID", SqlDbType.NChar, 5, "CustomerID");
parm.SourceVersion = DataRowVersion.Original;

da.UpdateCommand = cmd;
别样苍茫 2008-01-29
  • 打赏
  • 举报
回复
如果代码没错的话 加个databind();方法
saucer 2008-01-29
  • 打赏
  • 举报
回复
你的命令是错的,你的表有主键么?

建议参考SqlCommandBuilder让系统为你生成对应的UpdateCommand
http://msdn2.microsoft.com/en-us/library/system.data.sqlclient.sqlcommandbuilder.aspx

SqlCommandBuilder builder = new SqlCommandBuilder(da);

ds.Tables[0].Rows[0][1] = "国内新闻2";
da.Update(ds.Tables[0]);


如果你一定要自己生成UpdateCommand的话,建议参考
http://msdn2.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.updatecommand(VS.71).aspx

因为你需要设置参数等等

lovebaby 2008-01-29
  • 打赏
  • 举报
回复
并且按saucer 的说法,我用如下代码应该是更改了ds.Tables[0]中的记录,为什么仍然没有更新呢?
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class DateSet : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection Conn;
SqlDataAdapter SqlAdap;
Conn = new SqlConnection();
Conn.ConnectionString = System.Configuration.ConfigurationManager.AppSettings["SqlConnentionString"];

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM NewsClass ORDER BY ClassOrder", Conn);
DataSet ds = new DataSet();
da.Fill(ds, "NewsClass");
da.UpdateCommand = new SqlCommand("UPDATE NewsClass SET ClassOrder = 4 WHERE ClassID = 4", Conn);
ds.Tables[0].Rows[0][1] = "国内新闻2";
da.Update(ds.Tables[0]);
}
}

以上只是多了一行ds.Tables[0].Rows[0][1] = "国内新闻2";
lovebaby 2008-01-29
  • 打赏
  • 举报
回复
那如此说来我该如何用SqlDataAdapter的UpdateCommand来更新数据库呢?
saucer 2008-01-29
  • 打赏
  • 举报
回复
因为ds.Tables[0]里没有变化了的记录


lovebaby 2008-01-29
  • 打赏
  • 举报
回复
顶一下
随着通信电子技术的迅速发展,信息技术给家居行业产生了深远的影响,家居环境的智能化监控已经成为智能家居的一个重要的发展方向。人们逐渐对自己的生活提出一种更高的要求,他们需要一种智能化、可交互,并且融合现代创新科技的产品来改善他们的生活环境,使他们生活更加安全、舒适、便捷、智能。本文根据智能家居的发展背景和研究现状,并且从实用性和可行性角度出发,研究设计了一种基于STM32单片机的智能家居系统。该系统由一个多功能综合的技术系统组成,各个多功能子系统间具有协同配合能力。基于STM32单片机实现的功能子系统包括:智能温度检测,智能湿度检测,智能烟雾/火灾检测智能检测,无线传输,人机交互机构,风扇调节,报警模块。 整个系统分为前端51单片机采集板和后端STM32单片机接收板。 采集板使用DHT11温湿度传感器、MQ烟雾传感器完成室内家居环境的采集。然后通过nRFL24L01将采集到的数据发送给后端。接收板使用LCD1602完成数据显示、使用蜂鸣器模块报警,使用风扇驱动模块调节室内家居环境。本文完成了智能家居控制系统前端、后端软硬件的设计,使用Altium designer绘制了电路原理图,使用Keil C完成了51单片机和STM32单片机的编程与调试。 最后,对本文设计的基于STM32的智能家居控制系统进行部署调试。试验结果表明,该系统可成功应用在智能家居环境检测调节和火灾安全防护的领域,可提高家居生活智能化水平。

62,271

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧