我是SQL新手,在我的項目中,我試圖從DataBase表中填充DataSet,然後在DataSet中插入新行。做完這些之後,我再次使用DataSet數據填充數據庫表。在填寫之前,我正在清除或刪除數據庫表數據。嗯,我用下面的代碼來實現這一點:當代碼執行不正確時回滾更改
Database Table --> myTable
DataSet --> ds
OnButtonClick
string strQuery = "delete from [dbo].[myTable]"
SqlConnection conn = new SqlConnection(strConn);
SqlCommand cmd = new SqlCommand(strQuery, conn);
SqlCommand command;
SqlDataAdapter da = new SqlDataAdapter(cmd);
using (cmd)
{
using (conn)
{
conn.Open();
cmd.ExecuteNonQuery(); //deleting database table data
foreach (DataRow dr in ds.Tables[0].Rows) //Inserting new data into the Database table
{
command = new SqlCommand(InsertQuery, conn);
command.ExecuteNonQuery();
}
conn.Close();
}
}
上面的代碼工作正常,但是當存在command
任何異常的SqlCommand則刪除數據庫表完全沒有填充DataSet。任何修改此代碼的建議?請幫忙。
UPDATE:
string strQuery = "delete from [dbo].[myTable]";
using (SqlCommand cmd = new SqlCommand(strQuery, conn))
{
using (SqlCommand cmdReset = new SqlCommand("DBCC CHECKIDENT('myTable', RESEED, 0)", conn))
{
SqlDataAdapter da = new SqlDataAdapter(cmd);
conn.Open();
SqlTransaction sqlTransaction = conn.BeginTransaction();
cmd.Transaction = sqlTransaction;
try
{
cmd.ExecuteNonQuery(); //deleting database table data
cmdReset.ExecuteNonQuery(); //Resetting Identity of first column
foreach (DataRow dr in ds.Tables[0].Rows) //Inserting new data into the Database table
{
command = new SqlCommand(query.createDoctorRow(InsertQuery, conn);
command.ExecuteNonQuery();
}
sqlTransaction.Commit();
conn.Close();
}
catch (Exception e)
{
sqlTransaction.Rollback();
/*ERROR*/ throw;
}
}
}
ERROR - >「的ExecuteNonQuery要求命令有一個交易時分配給該命令的連接是處於掛起本地事務的事務屬性。命令尚未初始化。「
請考慮一個更具描述性的標題給你的問題。它應該是你的問題的簡要總結。 =) –
雅我在想,但仍然困惑着要保持什麼。抱歉。 –
我不知道該怎麼做。我是SQL新手。請不要說任何SQL我想盡可能使用c#做這個事情 –