Reputation: 19
There is a certain table (Plot, Subarea, Interval start, Interval end). I need to insert a record into several subareas at once. I decided to do this through checkboxes.
using (OleDbCommand cmd = Master.Connect.ORACLE_SAARC().CreateCommand())
{
cmd.CommandText = @"INSERT INTO SAARC.SUBAREA_EXCLUDE_INTERVAL (
ORIGINAL_ROW_ID, OPERATOR_ID, SUBAREA_ID,
INTERVAL_START, INTERVAL_END)
VALUES ( ? /* ORIGINAL_ROW_ID */,
? /* OPERATOR_ID */,
? /* SUBAREA_ID */,
? /* INTERVAL_START */,
? /* INTERVAL_END */)";
cmd.Parameters.AddWithValue("ORIGINAL_ROW_ID", (CurrentRecordId > 0) ? (object)CurrentRecordId : (object)System.DBNull.Value);
cmd.Parameters.AddWithValue("OPERATOR_ID", Authentification.User.UserName);
if (pnlSelectSubarea.Visible)
{
cmd.Parameters.AddWithValue("SUBAREA_ID", cbSelectSubarea.SelectedItem.Value);
}
else
{
cmd.Parameters.AddWithValue("SUBAREA_ID", ddlSubarea.SelectedItem.Value);
}
cmd.Parameters.AddWithValue("INTERVAL_START", cldPeriodStart.SelectedDate.Value);
cmd.Parameters.AddWithValue("INTERVAL_END", cldPeriodEnd.SelectedDate.Value);
cmd.ExecuteNonQuery();
I expect that the result of inserting an entry into the table will be on several subareas, but the record goes only on the first checkbox.
List<string> subareas = new List<string>();
foreach (ListItem it in cbSelectSubarea.Items) {if (it.Selected) subareas.Add(cbSelectSubarea.SelectedItem.Value);
cud some1 correct this shitcode? i think this is the way of resolving my problem
Now i have another prob. The first checkbox is added to the table without any bugs, when the loop processes the second one, an error occurs.
if (pnlSelectSubarea.Visible)
{
List<int> subareas = new List<int>();
foreach (ListItem it in cbSelectSubarea.Items)
{
if (it.Selected)
{
subareas.Add(Convert.ToInt32(it.Value));
cmd.Parameters.AddWithValue("ORIGINAL_ROW_ID", (CurrentRecordId > 0) ? (object)CurrentRecordId : (object)System.DBNull.Value);
cmd.Parameters.AddWithValue("OPERATOR_ID", Authentification.User.UserName);
cmd.Parameters.AddWithValue("SUBAREA_ID", it.Value);
cmd.Parameters.AddWithValue("INTERVAL_START", cldPeriodStart.SelectedDate.Value);
cmd.Parameters.AddWithValue("INTERVAL_END", cldPeriodEnd.SelectedDate.Value);
}
if (subareas.Count == 0) throw new Exception("Не выбрано ни одного подучастка");
cmd.ExecuteNonQuery();
}
cmd.Dispose();
}
Upvotes: 0
Views: 147
Reputation: 19
Add Parameters.Clear()
to foreach (ListItem it in cbSelectSubarea.Items)
like this
if (it.Selected)
{
subareas.Add(Convert.ToInt32(it.Value));
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("ORIGINAL_ROW_ID", (CurrentRecordId > 0) ? (object)CurrentRecordId : (object)System.DBNull.Value);
cmd.Parameters.AddWithValue("OPERATOR_ID", Authentification.User.UserName);
cmd.Parameters.AddWithValue("SUBAREA_ID", it.Value);
cmd.Parameters.AddWithValue("INTERVAL_START", cldPeriodStart.SelectedDate.Value);
cmd.Parameters.AddWithValue("INTERVAL_END", cldPeriodEnd.SelectedDate.Value);
}
Upvotes: 1