System.Data.OleDb 名前空間とメソッド OleDbCommandObject.ExecuteNonQuery() を使用して Access データベースにデータを挿入しようとしていますが、次のようなエラーが表示されます。
OleDbParameterCollection は、null 以外の OleDbParameter 型のオブジェクトのみを受け入れます。パラメータ名: 値
と
パラメータ ? _[#] にはデフォルト値がありません
私のパラメータのほとんどは、フォームを介して値が割り当てられたときに正常に機能する文字列オブジェクトです。ただし、必須ではないフィールドを空白のままにして (つまり、someString = "")、フォームを送信すると、エラーが発生します。このサイトや、次のような可能な解決策について言及している他のサイトで回答を探しました。
- OleDb は ? 名前の値の代わりに
- パラメータの数が ? の数と一致し、正しい順序で挿入されていることを確認してください。
- command.Parameters.Add(new OleDbParameter("Name", OleDbType.VarChar, 50, "Column").Value = someString); を使用します。またはそれらの線に沿った何か。
- command.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 です。私を正しい方向に導くことができる助けや情報は大歓迎です。