如果有1个dataset,我想让这个dataset里面所有的记录的某一个字段都改成某一个值,并且保存到数据库中,怎么做?

时间:2023-02-10 15:07:26
如果有1个dataset,我想让这个dataset里面所有的记录的某一个字段都改成某一个值,并且保存到数据库中,怎么做?
我知道如果光改DataSet里面的值很简单,用一个循环就可以了,但是怎么让改变好以后的结果保存到对应的数据库中的记录去?有没有批量的方法?相当于批量更新数据库

7 个解决方案

#1


那就写一个Update的SQL语句

#2


我要的是批量update,并不是用循环反复调用update的sql

#3


例:
   sqlcommand1.commandtext="update 表名 set 字段名=值";
   sqldataadapter1.updatecommand=sqlcommand1;
   sqldataadapter1.update();

   注意:如果在dataset中设置了别名,则表名和字段要与之对应

#4


public void Update( String accountID )
{
SqlConnection updateConn = new SqlConnection(Configuration.ConnectionString);

SqlCommand getBookListCMD = new SqlCommand("SELECT PreferenceBooks.AccountID, PreferenceBooks.BookID,PreferenceBooks.Notify FROM Books INNER JOIN PreferenceBooks ON Books.BookID = PreferenceBooks.BookID WHERE (PreferenceBooks.AccountID = " + accountID + ") AND (Books.Status = '未借出') AND (PreferenceBooks.Notify = '是') ", updateConn);
getBookListCMD.CommandTimeout = 30;

SqlDataAdapter getBookListDA = new SqlDataAdapter();
getBookListDA.SelectCommand = getBookListCMD;

updateConn.Open();

DataSet bookListDS = new DataSet();
getBookListDA.Fill(bookListDS, "PreferenceBooks");

//code to modify data in dataset here
for(int i=0;i<bookListDS.Tables["PreferenceBooks"].Rows.Count;i++)
{
bookListDS.Tables["PreferenceBooks"].Rows[i]["Notify"]="否";
}

bookListDS.AcceptChanges();

SqlDataAdapter updateDataAdapter = new SqlDataAdapter();
updateDataAdapter.UpdateCommand = new OleDbCommand("update PreferenceBooks set Notify = '否'", updateConn);

updateDataAdapter.Update(bookListDS, "PreferenceBooks");

updateConn.Close();

}
还是不行啊,这是我的代码,执行了以后数据库中的数据没有改变

#5


这个问题我知道:
1.DataAdapter的更新原理永远都不是做批量处理的,它的原理是对Datatable做循环,有修改的就去调用相应的SQL更新语句更新到数据库;而你在这之前使用了bookListDS.AcceptChanges(),便将Datatable的修改状态均改成了"未修改",所以DataAdapter的执行不会更新任何数据库中的数据;

2.你的问题也只能不使用DataAdapter,而使用SqlCommand去执行SQL语句更新,没别的办法.

#6


批量处理数据可以在SQL语句中做手脚
你可以定义一个变量来放SQL语句
string sqlString="delete from table where id='"+ XXX +"';";
sqlString+="delete from table where id='"+ YYY +"';";
当生成SQL语句的时候它就变成了
delete from table where id='xxx';delete from table where id='yyy';
这样就

#7


完成了批量处理的要求啦
记着在每句的后面+上分号
当然你也可以用dataset进行循环来处理

#1


那就写一个Update的SQL语句

#2


我要的是批量update,并不是用循环反复调用update的sql

#3


例:
   sqlcommand1.commandtext="update 表名 set 字段名=值";
   sqldataadapter1.updatecommand=sqlcommand1;
   sqldataadapter1.update();

   注意:如果在dataset中设置了别名,则表名和字段要与之对应

#4


public void Update( String accountID )
{
SqlConnection updateConn = new SqlConnection(Configuration.ConnectionString);

SqlCommand getBookListCMD = new SqlCommand("SELECT PreferenceBooks.AccountID, PreferenceBooks.BookID,PreferenceBooks.Notify FROM Books INNER JOIN PreferenceBooks ON Books.BookID = PreferenceBooks.BookID WHERE (PreferenceBooks.AccountID = " + accountID + ") AND (Books.Status = '未借出') AND (PreferenceBooks.Notify = '是') ", updateConn);
getBookListCMD.CommandTimeout = 30;

SqlDataAdapter getBookListDA = new SqlDataAdapter();
getBookListDA.SelectCommand = getBookListCMD;

updateConn.Open();

DataSet bookListDS = new DataSet();
getBookListDA.Fill(bookListDS, "PreferenceBooks");

//code to modify data in dataset here
for(int i=0;i<bookListDS.Tables["PreferenceBooks"].Rows.Count;i++)
{
bookListDS.Tables["PreferenceBooks"].Rows[i]["Notify"]="否";
}

bookListDS.AcceptChanges();

SqlDataAdapter updateDataAdapter = new SqlDataAdapter();
updateDataAdapter.UpdateCommand = new OleDbCommand("update PreferenceBooks set Notify = '否'", updateConn);

updateDataAdapter.Update(bookListDS, "PreferenceBooks");

updateConn.Close();

}
还是不行啊,这是我的代码,执行了以后数据库中的数据没有改变

#5


这个问题我知道:
1.DataAdapter的更新原理永远都不是做批量处理的,它的原理是对Datatable做循环,有修改的就去调用相应的SQL更新语句更新到数据库;而你在这之前使用了bookListDS.AcceptChanges(),便将Datatable的修改状态均改成了"未修改",所以DataAdapter的执行不会更新任何数据库中的数据;

2.你的问题也只能不使用DataAdapter,而使用SqlCommand去执行SQL语句更新,没别的办法.

#6


批量处理数据可以在SQL语句中做手脚
你可以定义一个变量来放SQL语句
string sqlString="delete from table where id='"+ XXX +"';";
sqlString+="delete from table where id='"+ YYY +"';";
当生成SQL语句的时候它就变成了
delete from table where id='xxx';delete from table where id='yyy';
这样就

#7


完成了批量处理的要求啦
记着在每句的后面+上分号
当然你也可以用dataset进行循环来处理