一个简单的问题:用dataset更新数据库,怎么老是提示并发冲突 在线等 急用~~
下面是一个简单的数据库操作类:
using System;
using System.Data;
using System.Data.SqlClient;
namespace dbSetting
{
public class LinkDataBase
{
private string strSQL;
private string connectionString = "workstation id=localhost;Integrated Security=SSPI;database=Capacity0715";
private SqlConnection myConnection;
private SqlCommandBuilder sqlCmdBld;
private DataSet ds = new DataSet();
private SqlDataAdapter da;
public LinkDataBase()
{
}
public DataSet SelectDataBase(string tempStrSQL,string tempTableName)
{
this.strSQL = tempStrSQL;
this.myConnection = new SqlConnection(connectionString);
this.da = new SqlDataAdapter(this.strSQL,this.myConnection);
this.ds.Clear();
this.da.Fill(ds,tempTableName);
return ds;//返回填充了数据的DataSet,其中数据表以tempTableName给出的字符串命名
}
//数据库数据更新(传DataSet和DataTable的对象)
public DataSet UpdateDataBase(DataSet changedDataSet,string tableName)
{
this.myConnection = new SqlConnection(connectionString);
this.da = new SqlDataAdapter(this.strSQL,this.myConnection);
this.sqlCmdBld = new SqlCommandBuilder(da);
this.da.Update(changedDataSet,tableName);
return changedDataSet;//返回更新了的数据库表
}
}
}
*********下面是用DataSet 更新数据代码 一直在datagrid里面显示和修改数据
*********调用:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace dbSetting
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private DataSet ds = new DataSet();
private LinkDataBase link = new LinkDataBase();
private string sendTableName = "tblColor";
private string sendStrSQL = "select ColorID,ColorName,Description from tblColor";
private System.Windows.Forms.DataGrid dataGrid1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
this.ds = link.SelectDataBase(sendStrSQL,sendTableName);//创建数据库连接
this.dataGrid1.DataSource = ds.Tables[0];
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
//......自动生成的一些代码
//更新数据按钮
private void button1_Click(object sender, System.EventArgs e)
{
try
{
int row = this.dataGrid1.CurrentCell.RowNumber;
this.dataGrid1.CurrentCell = new DataGridCell(row+1,0);
if (this.ds.HasChanges())
{
this.link.UpdateDataBase(this.ds.GetChanges(),sendTableName);
MessageBox.Show("数据修改成功!","信息");
}
else
{
MessageBox.Show("没有需要修改的数据!");
return;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,"提示");
return;
}
}
运行:第一次点击“更新按钮”提示“更新成功”;
在次更新数据后,点击“更新按钮”提示“并发冲突:影响的行数为0”
请高手指点以下呀 谢谢了 分不够再加~~
问题点数:80、回复次数:5Top
1 楼allen_21229(无间道四)回复于 2005-08-03 18:05:49 得分 0
请高手帮我解决以下呀 或者有更好的数据库操作类能共享以下吗?在下先谢过了Top
2 楼popcorn(米花.珠海)回复于 2005-08-03 18:06:21 得分 40
更新之后或重新编辑之前加上:this.ds.AcceptChanges();Top
3 楼weisai(与雪共舞)回复于 2005-08-21 23:13:09 得分 10
同意popcorn(米花.珠海)Top
4 楼yuwen16(rr)回复于 2005-08-26 12:37:48 得分 30
这样的解决办法还是没办法真正解决并发的情况。比如两台机器同时update一条记录。
同时去删除一条记录的时候。肯定报错。Top
5 楼TT008(T T)回复于 2005-10-28 09:59:43 得分 0
StudyTop




