Оператор SQL Server INSERT не выполняется, но я также не получаю исключение - PullRequest
0 голосов
/ 24 мая 2019

На моем событии нажатия кнопки я хочу вставить строку в таблицу. Когда я нажимаю кнопку, я не получаю никаких исключений, и я также не вижу своего сообщения. У меня есть окно сообщения как способ проверить, был ли выполнен запрос.

Когда я прохожу, он пропускает MessageBox и не выдает исключение.

private void BtnSend_Click(object sender, EventArgs e)
{
    string theDate = dateTimePicker1.Value.ToString("MM-dd-yyyy");

    var select = "INSERT INTO Trinity3(Date, Device_S_N, Student_Last_Name, Student_First_Name, Student_Number, School, Grade, Damage)" +
                 "VALUES (@Date, @Serial, @LastName, @FirstName, @StudentNum, @School, @Grade, @Damage)" +
                 "COMMIT";

    SqlConnection connection = new SqlConnection("Data Source=CPS1113020004; Initial Catalog=Coweta Public Schools; Integrated Security=True");               

    // Create a SqlCommand instance
    SqlCommand command = new SqlCommand(select, connection);

    // Add the parameter
    command.CommandType = CommandType.Text;
    command.CommandText = select;
    command.Parameters.AddWithValue("@Date", theDate);
    command.Parameters.AddWithValue("@Serial",txtSerial.Text);
    command.Parameters.AddWithValue("@LastName",txtLastName.Text);
    command.Parameters.AddWithValue("@FirstName",txtFirstName.Text);
    command.Parameters.AddWithValue("@StudentNum", txtStudentNum.Text);
    command.Parameters.AddWithValue("@School",txtSchool.Text);
    command.Parameters.AddWithValue("@Grade", txtGrade.Text);
    command.Parameters.AddWithValue("@Damage", txtDamage.Text);

    // Execute the query
    try
    {
        connection.Open();
        command.ExecuteNonQuery();
        MessageBox.Show("Records inserted successfully");
    }
    catch
    {
        // Handle exception, show message to user...
    }
    finally
    {
        connection.Close();
    }

    this.Visible = false;

    var searchForm = new SearchForm();
    searchForm.ShowDialog();
}

1 Ответ

3 голосов
/ 24 мая 2019

Вы генерируете исключение, но не видите, потому что в вашем блоке catch ничего нет.

  1. Посмотрите, попробуйте соглашение с ресурсами и всегда используйте его. Это автоматически закроет ваше соединение для вас, даже если есть исключение. Это необходимо.

  2. Добавьте исключение в ваш блок catch, чтобы вы могли увидеть ошибку.

  3. В вашей строке SQL должны быть пробелы после каждого раздела. Когда вы объединяете с «+», дополнительное пространство не создается. Итак, ваш запрос на самом деле выглядит так: INSERT INTO Trinity3(Date, Device_S_N, Student_Last_Name, Student_First_Name, Student_Number, School, Grade, Damage)VALUES (@Date, @Serial, @LastName, @FirstName, @StudentNum, @School, @Grade, @Damage)COMMIT

  4. Вместо того, чтобы писать запрос в приложении, вы должны создать в базе данных хранимую процедуру, которая будет содержать всю логику, необходимую для получения данных. Тогда ваше приложение будет просто вызывать процедуру, хранящуюся в одном слове, вместо гигантской строки, представляющей ваш t-sql. ТАКЖЕ вы можете на самом деле протестировать свой сохраненный процесс и убедиться, что он работает без участия приложения.

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