我用XSD数据集,比如说数据表结构如下:
CREATE TABLE [dbo].[test] (
[pKId] [int] NOT NULL ,
[name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL 
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[test] ADD 
CONSTRAINT [PK_test] PRIMARY KEY  CLUSTERED 
(
[pKId]
)  ON [PRIMARY] 
GO程序如下:
TestDS data = 一个函数,根据pKId查询返回的TestDS (XSD数据集);
DataRow row = data.Tables[0].Rows[0];
row["pKId"] = 1;
row["name"] = "Test"
data.AcceptChanges();strSql = "update test set pKId=@pKId,name=@name where pKId =1";
da.UpdateCommand = new SqlCommand(strSql);
da.UpdateCommand.Connection = sqlConn;
da.UpdateCommand.CommandText = strSql;da.UpdateCommand.Parameters.Add("@pKId",SqlDbType.Int).SourceColumn = "pKId";
da.UpdateCommand.Parameters.Add("@namepKId",SqlDbType.NVarChar,50).SourceColumn = "name";

if (da.Update(data, data.Tables[0].TableName) != 1) {
    sError += "信息 更新失败(@0)!" + strSql;
}
大概就是这样,可是我怎么调试 更新数,怎么也不等于1,数据库的数据也没有更新。

解决方案 »

  1.   

    你只是改了 TestDS data 这个 DataSet 里面的一条记录,让他table第一行的 pKId = 1这个时候你的物理数据库并没有改变啊,所有你再做 update 时候当然没有成功
      

  2.   

    我先获取TestDS 通过条件pKId=1获取的。所以他里面应该只有一条记录吧。并且我更新时也加条件了呀。
      

  3.   

    //这句有问题吧:
    strSql = "update test set pKId=@pKId,name=@name where pKId =1";
    你的@name是string啊,应该类似于:
    strSql = "update test set pKId=@pKId,name='"+@name+"'where pKId =1";
      

  4.   

    funsuzhou  不需要加''吧。我坐insert into语句时 insert into test (pKId,name) values (@pKId,@name)是好使的。
      

  5.   

    你在查询分析器里试试:
    --示例:(name是字符型)update test set name=Jack where pKId =1
    --错误update test set name='Jack' where pKId =1
    --正确
      

  6.   

    把SQL语句打印出来就知道对错了
      

  7.   

    都放到UpdateCommand里了。怎么大于sql语句?事件探查器是什么东东?没有用过有这条记录。