0

という名前のAccessテーブルがありTable1、その名前には。という名前のフィールドがありますFieldAFieldAテキストのデータ型がありました。

FieldA値010005が含まれています。

クエリを実行すると、一致するものが見つかりません。Access内でクエリを実行すると、値が見つかります。

OleDbConnection conn = null;
OleDbDataReader reader = null;

conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=\\\\server\\folder\\mydatabase.accdb");
conn.Open();

OleDbCommand cmd = new OleDbCommand("Select * FROM Table1 WHERE FieldA = @p1", conn);
cmd.Parameters.Add("@p1", OleDbType.VarChar);
cmd.Parameters["@p1"].Value = "010005";
reader = cmd.ExecuteReader();

dataGridView1.DataSource = reader;

ここで何が欠けていますか?

ありがとうございました!

編集:これはうまくいきました、そして私が使用することになったものです:

OleDbConnection conn = null;
conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=\\\\server\\folder\\mydatabase.accdb");
conn.Open();

string theValue = "010005";
string sql = string.Format("SELECT * FROM Table 1 where FieldA = '{0}'", theValue);

OleDbDataAdapter ada = new OleDbDataAdapter(sql, conn);

ada.Fill(dataTable1);

dataGridView1.DataSource = dataTable1;
4

4 に答える 4

3

パラメータに番号を割り当てているため、値はでは"10005"なく文字列に変換されます"010005"

それを文字列としてパラメータに割り当てます。

cmd.Parameters["@p1"].Value = "010005";

また、パラメータの周囲のアポストロフィを削除する必要があります。そうしないと、パラメータとして認識されず、"@p1"代わりに文字列が検索されます。

OleDbCommand cmd = new OleDbCommand("Select * FROM Table1 WHERE FieldA = @p1", conn);
于 2013-02-28T21:08:36.060 に答える
0

@p1あなたはそれを引用したのであなたは探しています

代わりにこれを使用してください:

OleDbCommand cmd = new OleDbCommand("Select * FROM Table1 WHERE FieldA = @p1", conn);
于 2013-02-28T21:08:55.553 に答える
0

おそらく、サポートされているとは思わないOleDbで名前付きパラメーターを使用しようとしているためです。

代わりにそれを行う方法の詳細:http: //msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx

于 2013-02-28T21:27:42.613 に答える
0

Prepare()初めてコマンドにパラメーターを追加した後、コマンドを実行する前に、コマンドを実行する必要があると思います。

OleDbCommand command    = new OleDbCommand(null, rConn);

// Create and prepare an SQL statement.
command.CommandText = "insert into Region (RegionID, RegionDescription) values (@id, @desc)" ;
command.Parameters.Add ( "@id", id) ;
command.Parameters.Add ( "@desc", desc) ;
command.Prepare() ;  // Calling Prepare after having set the Commandtext and parameters.
command.ExecuteNonQuery();

// Change parameter values and call ExecuteNonQuery.
command.Parameters[0].Value = 21;
command.Parameters[1].Value = "mySecondRegion";
command.ExecuteNonQuery();

適切Prepared()に設定されたら、(値だけでなく)適切なパラメータを変更しない限り、再度行う必要はありません。

于 2013-02-28T21:49:23.810 に答える