ошибка обработки исключения c # OledbException

#c# #exception-handling #oledb

#c# #исключение #oledb

Вопрос:

Я перепробовал множество возможных способов, но безрезультатно, и теперь у меня есть «Исключение OledbException было необработанным» при попытке перехватить и выдать исключение. Пожалуйста, сообщите спасибо!

(Предположим, что все новые входные данные представляют собой строки, а не целое число.)

 public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
        //connect to database
        string strOleDbConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Project.mdb";
        OleDbConnection objConnection = new OleDbConnection(strOleDbConnectionString);

        objConnection.Open();
        string newTagID = textBox1.Text;
        string newUser = textBox2.Text;
        string newAge = textBox3.Text;
        string newPhoneNumber = textBox4.Text;

        string InsertNewRecord = "INSERT INTO jiahe ([Tag ID], [User], [Age], [Phone Number]) VALUES ('"   newTagID   "', '"   newUser   "', '"   newAge   "', '"   newPhoneNumber   "')";
        OleDbCommand InsertCommand = new OleDbCommand(InsertNewRecord, objConnection);

        try
        {
            InsertCommand.Parameters.Add("@[Tag ID]", newTagID);
            InsertCommand.Parameters.Add("@[User]", newUser);
            InsertCommand.Parameters.Add("@[Age]", newAge);
            InsertCommand.Parameters.Add("@[Phone Number]", newPhoneNumber);
            InsertCommand.ExecuteNonQuery();

            MessageBox.Show("Record Added!");
        }

        catch (OleDbException ex)
        {
            throw ex;
        }

        finally
        {
            objConnection.Close();
        }
    }
}
  

}

Комментарии:

1. catch (OleDbException ex) { throw ex; }

2. Почему, когда я пытаюсь ввести целые числа, все работает нормально? Я думал, что это должна быть строка, когда я добавляю User, Age и т.д. С ‘ ‘?

3. Если вы собираетесь использовать параметры для своей команды (хорошо), то вы не объединяете данные в SQL. Кроме того, вы создаете исключение из обработчика исключений… является ли что-либо / все это преднамеренным?

4. Я предположил, что написал обработчик исключений вслепую, спасибо за выделение!

Ответ №1:

Ваш вопрос: почему вы получаете «Исключение OledbException было необработанным».

Итак, ответ на ваш вопрос (но не на вашу проблему) заключается в том, что вы повторно создаете исключение с помощью throw. Вместо этого сделайте что-то вроде:

  MessageBox.Show(ex.ToString());
  

Это покажет вам, в чем заключается реальная ошибка, стоящая за вашим кодом, и вы обработаете исключение.

Вероятно, возникает исключение oleDBException, поскольку для определения команды SQL следует использовать следующее:

  string InsertNewRecord = "INSERT INTO jiahe ([Tag ID], [User], [Age], [Phone Number]) VALUES (?newTagID, ?newUser, ?newAge,?newPhoneNumber)";
  

И затем остальная часть кода установит эти параметры, заменив @xxx в команде фактическими значениями. AddParameter добавит кавычки, поэтому вам не нужно.

Комментарии:

1. OleDb использует позиционные, а не именованные параметры. Вместо имен «@__» должно быть «?». Кроме того, ключевой особенностью параметров является то, что неправильно характеризовать их, говоря, что другой код заменит «@xxx» в команде. Этого НИКОГДА не происходит. Скорее, отдельные блоки передаются на сервер для кода и данных. Это то, что делает параметры безопасными.

2. Джоэл, ты имел в виду заменить @___ на? или ?xxx?