[英]Missing Required Parameter in Parameterized Query?
我在執行以下代碼時遇到以下錯誤
沒有為一個或多個必需參數提供值。
string paraName = "CONTROL";
string fullPathToExcel = @"C:\Users\xbbjn2h\Desktop\Mapping.xlsx";
string connString = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0 Xml;HDR=YES;""",fullPathToExcel);
string sql = "SELECT [FUNCTION],[NAME] from [Sheet1$] WHERE [FUNTION] = ?";
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = connString;
using (OleDbCommand cmd = new OleDbCommand(sql, conn))
{
cmd.Parameters.AddWithValue("?", paraName);
DataSet ds = new DataSet();
conn.Open();
OleDbDataAdapter dab = new OleDbDataAdapter(cmd);
dab.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
conn.Close();
}
OleDbCommand不支持命名參數(請參閱docs )。 您需要做的是:
cmd.Parameters.Add(new OleDbParameter { Value = paraName });
編輯:我還沒有嘗試過,但是我想可能可以使用上面的代碼並將null作為name參數傳遞...
詹姆斯,我可以看到您正在嘗試使用SQL
進行參數化。 但是, OleDb
不會遵循確切的模式。 在OleDb
您可以簡單地在SQL語句中添加問號,並稍后使用Parameter.Add().value
其填滿。
正如MSDN參考指出的那樣:
當CommandType設置為Text時,OLE DB .NET Provider不支持將命名參數傳遞給SQL語句或OleDbCommand調用的存儲過程的命名參數。
我已經按照您的樣子改寫了您的代碼
string paraName = "CONTROL";
string fullPathToExcel = @"C:\Users\xbbjn2h\Desktop\Mapping.xlsx";
string connString = string.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0 Xml;HDR=YES;""",fullPathToExcel);
string sql = string.Format("SELECT [{0}],[{1}] from [{2}] WHERE [{0}] = ?", strFunction, strName, strSheetName);
conn.ConnectionString = connString;
using (OleDbConnection conn = new OleDbConnection())
{
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.Parameter.Add("@Param1", OleDbType.VarChar).Value = paraName; // paraName or any value you wish.
DataSet ds = new DataSet();
conn.Open();
OleDbDataAdapter dab = new OleDbDataAdapter(cmd); //or cmd.ExecuteNonQuery(); in Insert sql commands.
dab.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
conn.Close();
}
注意 ,您應該將OleDbConnection
放在using
語句內,而不是OleDbCommand
。 我尚未測試過,它可能包含一些小錯誤。 除了在那里打孔並按播放(F5)。
您可以從OleDbCommand.Parameters屬性中找到有關OleDb
參數化的更多信息
祝你好運,讓我們知道會發生什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.