尝试执行以下代码时出现以下错误
没有给出一个或多个必需参数的值。
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();
}
答案 0 :(得分:0)
OleDbCommand不支持命名参数(参见the docs)。你需要做的是:
cmd.Parameters.Add(new OleDbParameter { Value = paraName });
编辑:我没有尝试过,但我想可以使用上面的代码并传递null作为名称参数......
答案 1 :(得分:0)
詹姆斯,我可以看到你正试图像SQL
那样进行参数化。但是OleDb
不会遵循确切的模式。在OleDb
中,您可以简单地在您的sql语句中添加问号,然后使用Parameter.Add().value
填写它们,这非常简单。
正如MSDN参考指出:
OLE DB .NET提供程序不支持传递的命名参数 SQL语句或由a调用的存储过程的参数 CommandType设置为Text时的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 Property
的OleDb
参数化中找到更多信息
祝你好运,让我们知道会发生什么。