为什么用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]);
}
}
...全文
247 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
  • 打赏
  • 举报
回复
顶一下

62,041

社区成员

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

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

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

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