为什么提示当传递具有新行的 DataRow 集合时,更新要求有效的 InsertCommand。

kyunwoo 2008-07-07 01:37:13

string select = "SELECT * FROM Syuser";
SqlConnection conn = new SqlConnection(source);
conn.Open();
SqlDataAdapter adapter = new SqlDataAdapter(select,conn);

DataSet ds = new DataSet();
adapter.Fill(ds, "Syuser");
DataTable dt = ds.Tables["Syuser"];
DataRow dr = dt.NewRow();
dr[0]="1003";dr[1]="XX";
dt.Rows.Add(dr);
dataGrid1.DataSource=dt.DefaultView;
adapter.Update(ds,"Syuser");
conn.Close();
运行时提示当传递具有新行的 DataRow 集合时,更新要求有效的 InsertCommand。
...全文
2613 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
乐逍遥2012 2012-07-16
  • 打赏
  • 举报
回复
很好谢谢
jy0001087 2011-09-07
  • 打赏
  • 举报
回复
加了就好了 研究中 - -
开发者孙小聪 2011-06-11
  • 打赏
  • 举报
回复
还没结贴 lz人品贼差
qipqipqip 2011-02-28
  • 打赏
  • 举报
回复
适配器,强大啊!
EnnoMiao 2009-06-29
  • 打赏
  • 举报
回复
SqlCommandBuilder scb = new SqlCommandBuilder(adapter);
NealXX 2009-06-29
  • 打赏
  • 举报
回复
基于多个表的视图,不能自动生成 Sql语句 俺一般自己写

private SqlDataAdapter PrepareDataAdapter(SqlTransaction tran)
{
SqlDataAdapter da = new SqlDataAdapter();
StringBuilder strSql = new StringBuilder();
strSql.Append("insert into BeyondAmt(");
strSql.Append("Barcode,MinAmt,Sellprice,STime,ETime)");
strSql.Append(" values (");
strSql.Append("@Barcode,@MinAmt,@Sellprice,@STime,@ETime)");
SqlParameter[] parameters = {
new SqlParameter("@Barcode", SqlDbType.NVarChar,20,"Barcode"),
new SqlParameter("@MinAmt", SqlDbType.Float,8,"MinAmt"),
new SqlParameter("@Sellprice", SqlDbType.Float,8,"Sellprice"),
new SqlParameter("@STime", SqlDbType.SmallDateTime,20,"STime"),
new SqlParameter("@ETime", SqlDbType.SmallDateTime,20,"ETime")};
da.InsertCommand = new SqlCommand(strSql.ToString(), tran.Connection, tran);
da.InsertCommand.Parameters.AddRange(parameters);
strSql = new StringBuilder();
strSql.Append("update BeyondAmt set ");
strSql.Append("Barcode=@Barcode,");
strSql.Append("MinAmt=@MinAmt,");
strSql.Append("Sellprice=@Sellprice,");
strSql.Append("STime=@STime,");
strSql.Append("ETime=@ETime");
strSql.Append(" where Barcode=@OldBarcode and MinAmt=@OldMinAmt ");
da.UpdateCommand = new SqlCommand(strSql.ToString(), tran.Connection, tran);
parameters = new SqlParameter[]{
new SqlParameter("@Barcode", SqlDbType.NVarChar,20,"Barcode"),
new SqlParameter("@MinAmt", SqlDbType.Float,8,"MinAmt"),
new SqlParameter("@Sellprice", SqlDbType.Float,8,"Sellprice"),
new SqlParameter("@STime", SqlDbType.SmallDateTime,20,"STime"),
new SqlParameter("@ETime", SqlDbType.SmallDateTime,20,"ETime")};
da.UpdateCommand.Parameters.AddRange(parameters);
SqlParameter paramBarcode = da.UpdateCommand.Parameters.Add("@OldBarcode", SqlDbType.NVarChar, 20, "Barcode");
paramBarcode.SourceVersion = DataRowVersion.Original;
SqlParameter paramMinAmt = da.UpdateCommand.Parameters.Add("@OldMinAmt", SqlDbType.NVarChar, 20, "MinAmt");
paramMinAmt.SourceVersion = DataRowVersion.Original;

da.DeleteCommand = new SqlCommand("delete BeyondAmt where Barcode=@Barcode and MinAmt=@MinAmt ", tran.Connection, tran);
da.DeleteCommand.Parameters.Add("@Barcode", SqlDbType.VarChar, 20, "Barcode");
da.DeleteCommand.Parameters.Add("@MinAmt", SqlDbType.Float, 50, "MinAmt");
foreach (SqlParameter item in da.DeleteCommand.Parameters)
{
item.SourceVersion = DataRowVersion.Original;
}
return da;
}
DevinXie 2009-06-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 laznhr 的回复:]
为什么要这么复杂的?有没有能解释这里边是什么原理呢?
[/Quote]
否则,系统不知道你要插什么类型的数据
laznhr 2008-11-26
  • 打赏
  • 举报
回复
为什么要这么复杂的?有没有能解释这里边是什么原理呢?
TMyesorno 2008-09-20
  • 打赏
  • 举报
回复
多谢回答者,我也有同样的问题,在这里解决啦!
kyunwoo 2008-07-07
  • 打赏
  • 举报
回复
已解决,多谢!
bluedodo 2008-07-07
  • 打赏
  • 举报
回复
你自己要加一条,不然XSD模式会找不到匹配的COMMAND
Adechen 2008-07-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 HolyPlace 的回复:]
SqlCommandBuilder scb = new SqlCommandBuilder(adapter);

[/Quote]

SqlCommandBuilder根据insertCommand构造updatecommand和deletecommand
yilanwuyu123 2008-07-07
  • 打赏
  • 举报
回复
仿照2楼。
HolyPlace 2008-07-07
  • 打赏
  • 举报
回复
SqlCommandBuilder scb = new SqlCommandBuilder(adapter);
顶!
amandag 2008-07-07
  • 打赏
  • 举报
回复
string select = "SELECT * FROM Syuser";
SqlConnection conn = new SqlConnection(source);
conn.Open();
SqlDataAdapter adapter = new SqlDataAdapter(select,conn);
SqlCommandBuilder scb = new SqlCommandBuilder(adapter);
DataSet ds = new DataSet();
adapter.Fill(ds, "Syuser");
DataTable dt = ds.Tables["Syuser"];
DataRow dr = dt.NewRow();
dr[0]="1003";dr[1]="XX";
dt.Rows.Add(dr);
dataGrid1.DataSource=dt.DefaultView;
adapter.Update(ds,"Syuser");
conn.Close();

110,032

社区成员

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

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

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