Я пытаюсь вставить данные в базу данных Access с использованием пространства имен System.Data.OleDb и метода OleDbCommandObject.ExecuteNonQuery(), но я получаю ошибки в строках :Добавить пустую строку в список параметров для вставки в AccessDB
OleDbParameterCollection принимает только ненулевой типа OleDbParameter объектов. Имя параметра: значение
и
Параметр? _ [#] не имеет значения по умолчанию
Большинство моих параметров являются строковыми объектами, которые отлично работают, когда значение присваивается им через форму. Однако, когда необязательное поле остается пустым (т.е. someString = "") и форма отправляется, возникает ошибка. Я просмотрел ответы на этом сайте и другие, в которых упоминаются возможные решения, такие как:
- OleDb использует? вместо имен значений
- Убедитесь, что количество параметров соответствует количеству символов? и что они вставлены в правильном порядке.
- Используйте команду.Parameters.Add (новый OleDbParameter («Имя», OleDbType.VarChar, 50, «Столбец»). Value = someString); Или что-то вдоль этих линий.
- Использовать команду.Parameters.AddWithValue ("parameterName", someString);
Я могу установить значение строки в «[пробел]», но затем это удаляет местозаполнитель в форме, которая не идеальна, и я не считаю, что это необходимо. Если мне нужно проверить пустую строку и добавить пробел перед добавлением значения в список параметров, тогда я буду, но я надеюсь избежать дополнительного кода, если это возможно.
Вот пример кода, который я использую:
Customer.cs
public class Customer
{
[Required]
public string ContactFirstName { get; set; }
[Required]
public string ContactLastName { get; set; }
public string Email {get; set; }
public string Phone {get; set; }
public Customer()
{
this.ContactFirstName = "";
this.ContactLastName = "";
this.Email = "";
this.Phone = "";
}
}
Метод используется для вставки данных
public int InsertValues(Customer customer)
{
this.dbConn.Open(); //System.Data.OleDb.OleDbConnection
this.query = "INSERT INTO someTable (ContactFirstName, ContactLastName, Email, Phone) VALUES (?,?,?,?)";
this.dbComm = new OleDbCommand(this.query, this.dbConn); //System.Data.OleDb.OleDbCommand
//Add parameters
this.dbComm.Parameters.AddWithValue("ContactFirstName", customer.ContactFirstName);
this.dbComm.Parameters.AddWithValue("ContactLastName", customer.ContactLastName);
this.dbComm.Parameters.AddWithValue("Email", customer.Email);
this.dbComm.Parameters.AddWithValue("Phone", customer.Phone);
this.dbComm.ExecuteNonQuery();
//--Snip--
}
Драйвер ODBC Я используется Microsoft.OleDb.ACE.12.0. Будет с благодарностью оценена любая помощь или информация, которые могут привести меня в правильном направлении.
Благодарим вас за ответ Gökhan Girgin. К сожалению, я уже пробовал это, но я пошел вперед и попробовал снова, чтобы дважды проверить и получить ту же ошибку. Параметр @Phone не имеет значения по умолчанию. Я читал, что драйвер JET не заботится об именах параметров, просто порядок и тесты пока показывают, что ACE аналогичен. Я нашел решение, которое я опубликую здесь в ближайшее время. Я не знаю, почему это необходимо, поскольку оно действительно не добавляет или не изменяет значение значения, переданного в метод AddWithValue. – jtgaut17
Я добавил свое решение в качестве одного из ответов. – jtgaut17