我有一个名为Table1
的Access表,其中有一个名为FieldA
的字段。 FieldA
的数据类型为文本。
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;
答案 0 :(得分:3)
您正在为参数指定一个数字,因此该值将转换为字符串"10005"
,而不是"010005"
。
将其作为字符串分配给参数:
cmd.Parameters["@p1"].Value = "010005";
此外,您需要删除参数周围的撇号,否则它不会将其识别为参数,而是查找字符串"@p1"
:
OleDbCommand cmd = new OleDbCommand("Select * FROM Table1 WHERE FieldA = @p1", conn);
答案 1 :(得分:0)
您正在寻找@p1
引用它
请改用:
OleDbCommand cmd = new OleDbCommand("Select * FROM Table1 WHERE FieldA = @p1", conn);
答案 2 :(得分:0)
可能是因为你试图使用OleDb的命名参数,我认为不支持。
详细说明如何改为: http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx
答案 3 :(得分: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()
,您就不需要再次执行此操作(除非您更改参数(而不仅仅是它们的值)。