问题描述
- 当传递具有已修改行的datarow集合时,更新时要求有效的insertCommand
-
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace DataGridViewTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.dataGridView1.AllowUserToDeleteRows = true;
}private void Form1_Load(object sender, EventArgs e) { // TODO: 这行代码将数据加载到表“tempdbDataSet.Class1”中。您可以根据需要移动或移除它。 this.class1TableAdapter.Fill(this.tempdbDataSet.Class1); } private void button1_Click(object sender, EventArgs e) { this.sqlDataAdapter1.Update(this.tempdbDataSet); } private void button2_Click(object sender, EventArgs e) { foreach (DataGridViewRow r in dataGridView1.SelectedRows) { dataGridView1.Rows.Remove(r); } } }
}
点击按钮更新,也就是button1_Click的时候就会报这个错。insert 和delete都不行,要怎么解决?
解决方案
“当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand”错误解决
当传递具有已修改行的DataRow 集合时,更新要求有效的UpdateCommand?[原]
当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand问题解决
解决方案二:
刚回答了一个一模一样的!呵呵缘分吧!
Code如下:我得这个是整张表批量更新;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace UseUpdate
{
public partial class Frm_Main : Form
{
public Frm_Main()
{
InitializeComponent();
}
private DataSet G_st = new DataSet();//声明表字段
private void Frm_Main_Load(object sender, EventArgs e)
{
G_st.Tables.Add(new DataTable());
GetMessage();//填充表
dgv_Message.DataSource = G_st.Tables[0];//设置数据源
dgv_Message.Columns[0].Visible = false;//隐藏主键列
}
private void btn_Submit_Click(object sender, EventArgs e)
{
SqlDataAdapter P_SqlDataAdapter = new SqlDataAdapter();//创建数据适配器
SqlCommand P_cmd = new SqlCommand(@"UPDATE [dbo].[备品] SET MPN=@MPN,品牌=@品牌,结存数量=@结存数量,货位号=@货位号 WHERE ID=@ID", new SqlConnection(@"server=192.168.60.18;database=浙江先芯科技;uid=sa;pwd=lierda"));
P_cmd.Parameters.Add("@ID", SqlDbType.Int, 10, "ID");//设置参数
P_cmd.Parameters.Add("@MPN", SqlDbType.NVarChar, 10, "MPN");//设置参数
P_cmd.Parameters.Add("@品牌", SqlDbType.NVarChar, 10, "品牌");//设置参数
P_cmd.Parameters.Add("@结存数量", SqlDbType.Int, 10, "结存数量");//设置参数
P_cmd.Parameters.Add("@货位号", SqlDbType.NVarChar, 10, "货位号");//设置参数
P_SqlDataAdapter.UpdateCommand = P_cmd;//设置UpdateCommand属性
P_SqlDataAdapter.Update(G_st.Tables[0]);//更新数据库中数据
G_st.AcceptChanges();//提交修改
MessageBox.Show("更改成功!","提示!");//弹出消息对话框
GetMessage();//填充表
dgv_Message.DataSource = G_st.Tables[0];//设置数据源
}
/// <summary>
/// 查询数据库信息
/// </summary>
/// <returns>方法返回DataTable对象</returns>
private void GetMessage()
{
G_st.Tables[0].Clear();
string P_Str_ConnectionStr = string.Format(@"server=192.168.60.18;database=浙江先芯科技;uid=sa;pwd=lierda");
string P_Str_SqlStr = string.Format("SELECT [MPN],[品牌],[结存数量],[货位号],[ID] FROM [dbo].[备品]");
SqlDataAdapter P_SqlDataAdapter = new SqlDataAdapter(//创建数据适配器
P_Str_SqlStr, P_Str_ConnectionStr);
P_SqlDataAdapter.Fill(G_st.Tables[0]);//填充数据表
}
private void dgv_Message_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
G_st.Tables[0].Rows[e.RowIndex][e.ColumnIndex] =dgv_Message.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
}
}
}
时间: 2024-12-23 03:21:51