Dapperを試すことができます。これは、 IDbConnectionを実装するあらゆるものに対して任意の SQL を実行する方法であり、SQL インジェクション攻撃を回避し、きれいで最新のインターフェースを備えています。
OleDbCommand.Parameters.AddWithValue("fieldname", yourobj);
それができない場合は、 (または同等の OdbcCommandを使用します。クエリには、パラメーター プレースホルダーとして疑問符を含める必要があります。Access の場合、次のように、フィールドが SQL クエリに表示されるのと同じ順序でパラメーター コレクションに引数を追加する必要があります。これ:
選択中
string sql = "select * from mytable where MyField LIKE ? and MyOtherField = ?";
// Dapper
using (OleDbConnection dbConn = new OleDbConnection("your connection string))
{
dbConn.Open();
var result = dbConn.Query(sql, new { MyField = "some value", MyOtherField = 3 });
foreach (dynamic myrow in result)
{
// you can get at your table rows using myrow.MyField, myrow.SomeOtherField etc
// To avoid myrow being dynamic, call dbConn.Query<T> where T is some type you
// define that matches your table definition
}
}
// The "old-fashioned" way
using (OleDbConnection dbConn = new OleDbConnection("your connection string))
using (OleDbCommand dbCmd = dbConn.CreateCommand())
{
dbConn.Open();
dbCmd.CommandText = sql;
dbCmd.Parameters.AddWithValue("MyField", "some value"));
dbCmd.Parameters.AddWithValue("MyOtherField", 3));
OleDbDataReader reader = dbCmd.ExecuteReader();
while (reader.Read())
{
string myfield = reader["myfield"] == DBNull.Value ? null : (string)reader["myfield"];
int SomeOtherField = reader["someotherfield"] == DBNull.Value ? 0 : (int)reader["someotherfield"];
}
}
挿入
string sql = "insert into mytable (MyField, MyOtherField) values (?, ?)";
// Dapper
using (OleDbConnection dbConn = new OleDbConnection("your connection string))
{
dbConn.Open();
dbConn.Execute(sql, new { MyField = "some value", MyOtherField = 3 });
}
// The "old-fashioned" way
using (OleDbConnection dbConn = new OleDbConnection("your connection string))
using (OleDbCommand dbCmd = dbConn.CreateCommand())
{
dbConn.Open();
dbCmd.CommandText = sql;
dbCmd.Parameters.AddWithValue("MyField", "some value"));
dbCmd.Parameters.AddWithValue("MyOtherField", 3));
dbCmd.ExecuteNonQuery(sql);
}
私の記憶が正しければ、オブジェクトからデータベースへ、またはデータベースからデータを移動するコードを作成するとき、Access は数値型にも非常にうるさいです。正確に正しい型との間でキャストしていることを確認する必要があります。