我在使用Ado.net的时候遇到无法update的问题

CNSC 2003-07-28 02:50:54
我的程序是:
private void newone_Click(object sender, System.EventArgs e){
try{
DataRow newData=dataTable.NewRow();
newData["Sid"]=txtSid.Text;
newData["Sname"]=txtSname.Text;
dataTable.Rows.Add(newData);
myDataAdapter.Update(myDataSet,"student");
Application.DoEvents();
myDataSet.AcceptChanges();
print();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
程序总是遇到异常:
当传递具有新行的DataRow集合时,更新要求有效的InsertCommand.
谢谢大家帮忙。
...全文
56 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
维她奶 2003-07-28
  • 打赏
  • 举报
回复
是不是少了OleDbCommandBuilder对象啊?因为缺少OleDbCommandBuilder对象则OleDbDataAdapter对象的Update()功能无法实现。
foniks 2003-07-28
  • 打赏
  • 举报
回复
问题可能有三种:
1、没有使用OleDbCommandBuilder对象填充对应OleDbDataAdapter的UpdateCommand命令(就象dahuzizyd所言);
2、在与dataTable对应的数据表中并非所有的主键字段在newrow中都被赋值;
3、dataTable是有多张物理表联合查询得到的,.Net中无法自动生成与复杂Select语句对应的update语句。
雪狼1234567 2003-07-28
  • 打赏
  • 举报
回复
参考如下:
// 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"));

this.sqlDa.InsertCommand = this.sqlInsertCommand1;

try
{
sqlDa.Update(dt.GetChanges,"student");
return true;
}
catch(System.Data.SqlClient.SqlException ex)
{

return false;
}
finally
{
conn.Close();
}
dahuzizyd 2003-07-28
  • 打赏
  • 举报
回复
可以使用CommandBuilder类来给数据适配器生成Command:
OleDbConnection myConn = new OleDbConnection(myConnection);
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter();
myDataAdapter.SelectCommand = new OleDbCommand(mySelectQuery, myConn);
OleDbCommandBuilder custCB = new OleDbCommandBuilder(myDataAdapter);

myConn.Open();

DataSet custDS = new DataSet();
myDataAdapter.Fill(custDS, "Customers");

//code to modify data in dataset here

//Without the OleDbCommandBuilder this line would fail
myDataAdapter.Update(custDS, "Customers");

myConn.Close();

return custDS;
详细的可以参考帮助里的类库:
.NET框架/参考/类库/System.OleDb/OleDbCommandBuilder

111,119

社区成员

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

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

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