C# строка ввода не была в правильном формате, когда не было введено значение в текстовое поле - PullRequest
0 голосов
/ 14 марта 2020

Я использую SqlCommand для вставки значений в строку SQL Таблицы сервера. Он прекрасно работает, когда я вставляю текст во все мое текстовое поле, но всякий раз, когда есть пустое текстовое поле, я всегда получаю эту ошибку

Введенная строка была в неправильном формате

Вот мой код

private void BtnSubmit_Click(object sender, EventArgs e)
{
  try
  {
    if (MessageBox.Show("Are you sure you want to save this book?", "Saving Record", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
    {
      cn.Open();

      cm = new SqlCommand("INSERT INTO tblBook (bkISBN, bkTitle, bkEdition, bkGenre, bkMediaType, bkLanguage, bkAuthor, bkPublisher, bkPrice, bkDate) VALUES (@ISBN, @booktitle, @edition, @genre, @mediatype, @language, @author, @publisher, @price, @date)", cn);
      cm.Parameters.AddWithValue("@ISBN", txtISBN.Text);
      cm.Parameters.AddWithValue("@booktitle", txtTitle.Text);
      cm.Parameters.AddWithValue("@edition", txtEdition.Text);
      cm.Parameters.AddWithValue("@genre", txtGenre.Text);
      cm.Parameters.AddWithValue("@mediatype",cboMediaType.Text);
      cm.Parameters.AddWithValue("@language", txtLanguage.Text);
      cm.Parameters.AddWithValue("@author", txtAuthor.Text);
      cm.Parameters.AddWithValue("@publisher", txtPublisher.Text);
      cm.Parameters.AddWithValue("@price", int.Parse(txtPrice.Text));
      cm.Parameters.AddWithValue("@date", dtCreated.Text);

      cm.ExecuteNonQuery();
      cn.Close();

      MessageBox.Show("Record has been successfully saved!");
      Clear();
      frmlist.LoadRecords();
    }
  }
  catch (Exception ex)
  {
    MessageBox.Show(ex.Message);
  }
}

Любая помощь, чтобы исправить это будет оценена. Спасибо.

1 Ответ

2 голосов
/ 14 марта 2020

Вот ваша строка проблемы:

cm.Parameters.AddWithValue("@price", int.Parse(txtPrice.Text));

Метод Int32.Parse выдает FormatException, если не может проанализировать значение.

Используйте Int32.TryParse (с соответствующим CultureInfo!) вместо этого:

cm.Parameters.AddWithValue("@price", Int32.TryParse( txtPrice.Text, CultureInfo.CurrentCulture, NumberStyles.Currency, out Int32 priceValue ) ? priceValue : DBNull.Value);

Тем не менее, не используйте AddWithValue!

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