2013-02-28 101 views
0

我有一個名爲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; 
+1

是它的@ P1單引號? – 2013-02-28 21:08:21

回答

3

您分配一個號到參數,因此該值將被轉換成字符串"10005",不"010005"

其指定爲一個字符串參數:

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

此外,您還需要去掉周圍的參數撇號,否則將不承認它作爲一個參數,並查找字符串"@p1"代替:

OleDbCommand cmd = new OleDbCommand("Select * FROM Table1 WHERE FieldA = @p1", conn); 
+0

好吧,這是有道理的。我已經更新了我的代碼,您的建議,但查詢仍然無法在表中找到010005。我已經三重檢查了值是否存在,並且表名是正確的。 – 2013-02-28 21:21:20

+0

@JeffBrady:將值直接放入查詢中進行測試:'「Select * FROM Table1 WHERE FieldA ='010005'」'。如果這有效,那麼你知道你如何使用這個參數有什麼問題,否則它根本就不存在,你可能會在一個錯誤的數據庫中出現。 – Guffa 2013-02-28 21:25:11

+0

我試過了,仍然沒有結果。我期待dataGridView1顯示結果..希望這是在我的代碼中是正確的。 – 2013-02-28 21:35:46

0

您正在尋找@p1因爲你引用它

使用這個:

OleDbCommand cmd = new OleDbCommand("Select * FROM Table1 WHERE FieldA = @p1", conn); 
+0

謝謝..我已經放棄了參數周圍的引號,並且還在每個@ Guffa的建議上面添加了引號。但是,它仍然沒有找到結果。 – 2013-02-28 21:23:49

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(),你不需要再做一次(除非你改變正確的(而不僅僅是它們的值參數)。

相關問題