采用下面的方法,如果DataSet全是新增的数据就OK,但如果DataSet相应数据库而言,有新增的记录,也有修改的记录时,执行下面的方法只会将DataSet里的数据又全部写回到数据库,修改的记录就重复了。该怎么处理?如何加上事务处理机制?
public int UpdateByDataSetASB(DataSet ds, string sqlStr,string strTblName, string strConnection)
{
try
{
using (SqlConnection conn = new SqlConnection(strConnection))
{ SqlDataAdapter myAdapter = new SqlDataAdapter();
SqlCommand myCommand = new SqlCommand(sqlStr, conn);
myAdapter.SelectCommand = myCommand;
SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);
myAdapter.Update(ds, strTblName); return 0;
}
}
catch(Exception)
{
return -1;
}
}
public int UpdateByDataSetASB(DataSet ds, string sqlStr,string strTblName, string strConnection)
{
try
{
using (SqlConnection conn = new SqlConnection(strConnection))
{ SqlDataAdapter myAdapter = new SqlDataAdapter();
SqlCommand myCommand = new SqlCommand(sqlStr, conn);
myAdapter.SelectCommand = myCommand;
SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);
myAdapter.Update(ds, strTblName); return 0;
}
}
catch(Exception)
{
return -1;
}
}
解决方案 »
- 菜鸟问题
- 讨论一下关于字符串编写时换行的问题
- 关于TextBox绑定数据的问题!DataBindings!!!高手请进!
- 平铺窗口的问题,主窗口上面有个treeview控件,在运行之后,随着主界面最大化,而treeview的高度也随着主界面而变化.
- asp.net下有没有比较看看的好用得下拉菜单控件,免费的给推荐一下谢谢
- 提供一FTP,大家看看了
- 高分求救!(在线等待)freetextbox在显示文本时,会出现某行只显示字体下一半截(1/5左右),有哪位老大能帮忙解决,不甚感激!
- 求用户登陆界面的例子
- 一个sql 日期函数问题!! 急
- 求教一个正则表达式,我想在一个文本框中输入整数为十位小数点后两位,这个正则表达式如何写,在线等待,谢谢!
- 求解答下面这段代码
- 再献100分求:如何将dataGridView1里的数据批量插入、更新到SQL数据库
这句没有识别到更改的内容,所以就都是插入数据,没有更新动作。不知道修改前的数据是不是:SqlCommand myCommand = new SqlCommand(sqlStr, conn);
看我理解错没有?
dt.Rows.Add(rowData); SqlCommandBuilder cmd = new SqlCommandBuilder(dprData);//确保对应数据库的表有主键
dprData.Update(dt, "条件 ");
dt.AcceptChanges();
数据库的主键肯定有,而且是三个字段。我解释一下我的代码,估计是我理解有误,希望大家不笑话我,请大家指正一下:///ds,是我在dataGridView中编辑过后,需要回写数据库的数据,且列名与顺序都与数据库保持一致,但是
///这里的数据相对数据库:有新增的,有修改的,有删除了的数据。总之是需要回写数据库的数据
///sqlStr=Select * from table,是回写数据库识别的现在数据。
///strTblName,就是数据库需要回写的表名。
///strConnection,是连接数据库的字符串。
public int UpdateByDataSetASB(DataSet ds, string sqlStr,string strTblName, string strConnection)
{
try
{
using (SqlConnection conn = new SqlConnection(strConnection))//实例化一个连接
{ SqlDataAdapter myAdapter = new SqlDataAdapter();//实例化一SqlDataAdapter类
SqlCommand myCommand = new SqlCommand(sqlStr, conn);//连接数据库,返回现在数据
myAdapter.SelectCommand = myCommand;//载入数据库中的现在数据
SqlCommandBuilder myCommandBuilder = new SqlCommandBuilder(myAdapter);
//载入到SqlCommandBuilder实例中
myAdapter.Update(ds, strTblName);//将需要回写的数据填充进来,自动识别插入、修改、删除动作 return 0;
}
}
catch(Exception)
{
return -1;
}
}
主键怎么能是 三 个字段?一个表中只能有一个column设为主键吧
获取第一行记录的RowState用DataSet.Tables[0].Rows[0].RowState
设置第一行记录的RowState为新增行用DataSet.Tables[0].Rows[0].SetAdded();
设置第一行记录的RowState为修改行用DataSet.Tables[0].Rows[0].SetModified();
设置第一行记录的RowState为删除行用DataSet.Tables[0].Rows[0].Delete();
就是现有两个DataTable,第1个是数据库现有的数据,第2个是需要回写数据库的数据,怎么设置主键与合并呀?
//假设data1为数据库现有的数据,data2为要回写的数据,并且都不为null
data1.PrimaryKey = new DataColumn[] { data1.Columns["Col1"],data1.Columns["Col2"],data1.Columns["Col3"]};//这里替换为你三个主键的列名
data1.Merge(data2);//瞧,多简单啊!
你的方法就是我想要的结果。