Как я могу вставить в две таблицы, связанные с SQL? - PullRequest
2 голосов
/ 08 августа 2011

У меня есть две таблицы, одна для хранения информации о человеке и одна для хранения его телефонных номеров, tbl -persons подключается к таблице tbl_phones с помощью ключа forgin.

У меня есть одна форма для вставки в две таблицы, и это функция

 private void save()
    {
        SqlCommand cmd = new SqlCommand("insert into tbl_persons (name,address,fax,mobile,email,website) values (@name,@address,@fax,@mobile,@email,@website)" + "Select Scope_Identity()", conn);
        cmd.CommandType = CommandType.Text;

        cmd.Parameters.AddWithValue("@name", T_name.Text.Trim());
        cmd.Parameters.AddWithValue("@address", T_address.Text.Trim());
        cmd.Parameters.AddWithValue("@fax", T_fax.Text.Trim());
        cmd.Parameters.AddWithValue("@mobile", T_mobile.Text.Trim());
        cmd.Parameters.AddWithValue("@email", T_mobile.Text.Trim());
        cmd.Parameters.AddWithValue("@website", T_mobile.Text.Trim());

        int ID = Int32.Parse(cmd.ExecuteScalar().ToString());
        SqlCommand cmd2 = new SqlCommand("insert into tbl_phones (phone,person_id) values (@phone,@person)", conn);
        cmd2.CommandType = CommandType.Text;

        cmd2.Parameters.AddWithValue("@phone", T_phone.Text.Trim());
        cmd2.Parameters.AddWithValue("@person", ID);

        int val = cmd.ExecuteNonQuery();
        int val2 = cmd2.ExecuteNonQuery();
        if (val > 0)
        {
            MessageBox.Show("تم إدخال البيانات بنجاح"+ID, "تم", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign | MessageBoxOptions.RtlReading);
            resetFields();
            GetDate();
        }
    }

но ошибка в том, что информация о человеке вставляется дважды, а номер телефона вводится один раз, в чем ошибка?

Ответы [ 4 ]

6 голосов
/ 09 августа 2011

Вы выполняете команду в cmd дважды. Один здесь:

int ID = Int32.Parse(cmd.ExecuteScalar().ToString());

А другой здесь:

int val = cmd.ExecuteNonQuery();

Обе инструкции (cmd.ExecuteScalar() и cmd.ExecuteNonQuery()) запускают команду. Убедитесь, что у вас есть только один из них (возможно, первый, но вы являетесь владельцем своей логики, так что это ваш вызов).

3 голосов
/ 09 августа 2011

Похоже, вы выполняете cmd дважды.

Однажды здесь:

                      \/
int ID = Int32.Parse(cmd.ExecuteScalar().ToString());
                      /\

и однажды здесь:

           \/
int val = cmd.ExecuteNonQuery();
           /\
0 голосов
/ 09 августа 2011

Вы выполняете первый запрос дважды:

int ID = Int32.Parse(cmd.ExecuteScalar().ToString());

и

int val = cmd.ExecuteNonQuery();

Удалите второй.

0 голосов
/ 09 августа 2011

Проблема в том, что вы звоните cmd.ExecuteNonQuery дважды!

int ID = Int32.Parse(cmd.ExecuteScalar().ToString());

А потом ....

int val = cmd.ExecuteNonQuery();

Следовательно, вставляя 2 записи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...