#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?