Нарушение параллелизма: DELETECOMMAND

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by fisher79ru, 1 Jun 2015.

  1. fisher79ru

    fisher79ru New Member

    Joined:
    1 Jun 2015
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Накидал примерный код, который надо допилить.

    public partial class Form1 : Form
    {
    System.Data.SqlClient.SqlConnection con1;
    System.Data.SqlClient.SqlDataAdapter da1;
    System.Data.SqlClient.SqlCommand selCmd;
    System.Data.SqlClient.SqlCommandBuilder b;
    System.Data.DataSet ds1;
    System.Data.DataTable dt1;
    string selQry;

    public Form1()
    {
    InitializeComponent();
    }

    private void Form1_Load(object sender, System.EventArgs e)
    {
    con1 = new System.Data.SqlClient.SqlConnection();
    da1 = new System.Data.SqlClient.SqlDataAdapter();
    ds1 = new System.Data.DataSet();
    b = new System.Data.SqlClient.SqlCommandBuilder(da1);
    selCmd = new System.Data.SqlClient.SqlCommand();
    selQry = "SELECT ид as ID, первый, второй, третий, ключ FROM Test where [ключ]=@p0";
    selCmd.Parameters.Add("p0", System.Data.SqlDbType.Int, 5, "ключ");
    selCmd.Connection = con1;
    selCmd.CommandText = selQry;
    da1.SelectCommand = selCmd;
    dt1 = new System.Data.DataTable();

    try
    {
    con1.ConnectionString = @"Data Source=SQL-SRV;Failover Partner=SQL-SRV;Initial Catalog=DATA;Persist Security Info=True;User ID=AM;Password=1;Replication=True";
    con1.Open();
    MessageBox.Show("Соединение успешное!");

    selCmd.Parameters["p0"].Value = 1;

    da1.Fill(ds1, "Test");
    grid2.DataSource = ds1.Tables["Test"].DefaultView;
    grid2.Refresh();

    }
    catch (System.Exception ex)
    {
    MessageBox.Show("Соединение отсутствует!" + ex.Message);
    }
    }

    private void grid2_UserDeletedRow(object sender, DataGridViewRowEventArgs e)
    {
    dt1.GetChanges(System.Data.DataRowState.Deleted);
    da1.DeleteCommand = b.GetDeleteCommand();
    if (dt1 != null)
    {
    da1.Update(ds1.Tables[0]);
    }

    }

    private void grid2_CellValidated(object sender, DataGridViewCellEventArgs e)
    {
    dt1.GetChanges(System.Data.DataRowState.Added | System.Data.DataRowState.Modified);
    da1.UpdateCommand = b.GetUpdateCommand();
    da1.InsertCommand = b.GetInsertCommand();
    if (dt1 != null)
    {
    da1.Update(ds1.Tables[0]);
    }
    }

    private void grid2_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
    grid2.Rows[grid2.CurrentRow.Index].Cells["ключ"].Value = 1;
    }

    }

    Таблица Test(ид - ключевое поле счетчик, первый, второй, третий - текст, ключ - число)

    1. После добавления записей в грид(DataGridView) закрываю форму, сохраняются все записи кроме последней.
    2. Если добавить одну строчку, потом вторую, и сразу же попытаться удалить первую, то возникнет исключение Нарушение параллелизма: DELETECOMMAND.
    3. Не отображается ключевое поле в гриде, только после повторного открытия формы.

    Пожалуйста помогите!