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

您正在为参数分配一个数字,因此该值将转换为 string "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

我相信您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 回答
0

可能是因为您尝试将命名参数与 OleDb 一起使用,我不认为它受支持。

有关如何执行此操作的详细信息:http: //msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx

于 2013-02-28T21:27:42.613 回答
0

您正在寻找,@p1因为您引用了它

改用这个:

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