对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成。

心雨楼 2003-08-19 06:30:41
//读取数据

SqlDataAdapter1 = new SqlDataAdapter(SqlSelectComPrcB,conn);
SqlDataAdapter1.SelectCommand.Parameters.Add("@No","LD0308190008");
DataSet1 = new DataSet();

SqlDataAdapter1.Fill(DataSet1,"table1");
DataGrid1.DataSource = DataSet1.Tables["table1"].DefaultView;
DataGrid1.DataBind();
//设定主键table1
DataColumn[] keys = new DataColumn[1];
keys[0] = DataSet1.Tables["table1"].Columns[0];
DataSet1.Tables["table1"].PrimaryKey = keys;
//从数据集中找到指定行!!
//string key = ((TextBox)DataGrid1.Items[e.Item.ItemIndex].Cells[1].Controls[0]).Text;
DataRow rows=DataSet1.Tables["table1"].NewRow() ;
rows = DataSet1.Tables["table1"].Rows.Find(17);

rows["ComPrdNo"] = "B";
SqlCommandBuilder CB = new SqlCommandBuilder(SqlDataAdapter1);
SqlDataAdapter1.Update(DataSet1,"table1");



出现这样的问题:对于不返回任何键列信息的 SelectCommand 不支持 UpdateCommand 的动态 SQL 生成。
但是我做的第一个from就这样写的!也可以修改数据。但是现在不行啊!
为什么?
...全文
156 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
雪狼1234567 2003-08-19
  • 打赏
  • 举报
回复
新建一个项目->点工具栏上面的“服务器资源管理器"->服务器-》你电脑的名字->sql server数据库->数据库名字->表->选中你要生成sql代码的表把它拖到你的Form上,然后右点查看代码:把下面的方法打开,你可以看到啦
private void InitializeComponent()
雪狼1234567 2003-08-19
  • 打赏
  • 举报
回复
这个没关系,上面的代码是对所有的情况都适用,也就是说,你改动某一行中的一列,用上面的代码可以,你改了十行数据中的3列,上面的代码也可以,所以你自己写的时候就按照上面的把表里的所有列都加上,或者你可以先让它行动生成代码,然后再改一下,速度比较快,
方法如下:
心雨楼 2003-08-19
  • 打赏
  • 举报
回复
我要改动的列数不一定呢?
怎么办?
雪狼1234567 2003-08-19
  • 打赏
  • 举报
回复
其实你还是自己写语句的好,因为自动生成的有好多垃圾,举个例子,
// sqlInsertCommand1
//
this.sqlInsertCommand1.CommandText = "INSERT INTO student(stuno, name) VALUES (@stuno, @name)";
this.sqlInsertCommand1.Connection = this.conn;
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@stuno", System.Data.SqlDbType.VarChar, 4, "stuno"));
this.sqlInsertCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@name", System.Data.SqlDbType.VarChar, 50, "name"));
//
// sqlUpdateCommand1
//
this.sqlUpdateCommand1.CommandText = "UPDATE student SET stuno = @stuno, name = @name WHERE (stuno = @Original_stuno)";
this.sqlUpdateCommand1.Connection = this.conn;
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@stuno", System.Data.SqlDbType.VarChar, 4, "stuno"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@name", System.Data.SqlDbType.VarChar, 50, "name"));
this.sqlUpdateCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_stuno", System.Data.SqlDbType.VarChar, 4, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "stuno", System.Data.DataRowVersion.Original, null));

// sqlDeleteCommand1
//
this.sqlDeleteCommand1.CommandText = "DELETE FROM student WHERE (stuno = @Original_stuno)";
this.sqlDeleteCommand1.Connection = this.conn;
this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_stuno", System.Data.SqlDbType.VarChar, 4, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "stuno", System.Data.DataRowVersion.Original, null));

this.sqlDa.DeleteCommand = this.sqlDeleteCommand1;
this.sqlDa.InsertCommand = this.sqlInsertCommand1;
this.sqlDa.UpdateCommand = this.sqlUpdateCommand1;
try
{
sqlDa.Update(dt.GetChanges,"student");
return true;
}
catch(System.Data.SqlClient.SqlException ex)
{

return false;
}
finally
{
conn.Close();
}
心雨楼 2003-08-19
  • 打赏
  • 举报
回复
有没有人啊!帮帮忙啊!
心雨楼 2003-08-19
  • 打赏
  • 举报
回复
有的!
dahuzizyd 2003-08-19
  • 打赏
  • 举报
回复
使用sqlCommandBuiler时要求表有主键
雪狼1234567 2003-08-19
  • 打赏
  • 举报
回复
表里要有主键才可以用builder来生成
心雨楼 2003-08-19
  • 打赏
  • 举报
回复
何以故?

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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