私は 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 がいっぱいになりません。このコードを変更するための提案はありますか? 助けてください。
アップデート:
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;
}
}
}
エラー --> 「ExecuteNonQuery では、コマンドに割り当てられた接続が保留中のローカル トランザクションにある場合、コマンドにトランザクションが必要です。コマンドのトランザクション プロパティが初期化されていません。」