2014-09-24 134 views
-1

以下代碼用於將數據從excel讀取到gridview中。OleDbAdapter在查詢中不識別'@'

String cusid1 = maskedTextBox1.Text.ToString(); 
string s = "provider=Microsoft.Jet.OLEDB.4.0;data source=c:xxx.xls;Extended Properties=Excel 8.0;"; 
OleDbConnection con = new OleDbConnection(s); // connection string 
con.Open(); 
string strQuery = "select * from [test$] where cusid = @cusid1"; 
OleDbDataAdapter da = new OleDbDataAdapter(strQuery, con); 

//Or Use OleDbCommand 
DataSet ds = new DataSet(); 
da.Fill(ds); 
dataGridView1.DataSource = ds.Tables[0]; 

conn.Open(); 

但當代替@cusid1select * from [test$] where cusid=1指定一個數字,我收到正確的輸出。如果我在查詢中使用@cusid,則會出現此錯誤:

No value given for one or more required parameters.

+5

您不添加'@ cusid1'參數到命令的任何地方 – user2711965 2014-09-24 13:32:05

+0

你預計到設置'@ cusid1值'' – 2014-09-24 13:33:36

回答

1

您應該傳入參數。另外,命名參數在OLEDB中不做任何事情。他們被忽略。改爲使用?

MSDN

The OLE DB .NET Provider does not support named parameters for passing parameters to an SQL statement

的代碼,你需要:

string strQuery = "select * from [test$] where cusid = ?"; 

OleDbCommand command = new OleDbCommand(sqlQuery, conn); 
command.Parameters.AddWithValue("?", cusid); 

da.SelectCommand = command; 
+0

問題解決了很多。 – amar 2014-09-24 15:39:32