C# 参数化查询中缺少必需的参数?
我在尝试执行下面的代码时遇到以下错误 没有为一个或多个必需参数提供值。C# 参数化查询中缺少必需的参数?,c#,oledb,parameterized-query,C#,Oledb,Parameterized Query,我在尝试执行下面的代码时遇到以下错误 没有为一个或多个必需参数提供值。 OleDbCommand不支持命名参数(请参阅)。您需要做的是: cmd.Parameters.Add(new OleDbParameter { Value = paraName }); 编辑:我还没有尝试过,但我想可能可以使用上面的代码并将null作为name参数传递…James,我可以看到您正在尝试使用SQL进行参数化。但是,OleDb不会遵循确切的模式。在OleDb中,您可以简单地在sql语句中添加问号,然后使用Pa
OleDbCommand不支持命名参数(请参阅)。您需要做的是:
cmd.Parameters.Add(new OleDbParameter { Value = paraName });
编辑:我还没有尝试过,但我想可能可以使用上面的代码并将null作为name参数传递…James,我可以看到您正在尝试使用
SQL
进行参数化。但是,OleDb不会遵循确切的模式。在OleDb
中,您可以简单地在sql语句中添加问号,然后使用Parameter.Add().value
来填充问号,这非常简单
正如MSDN参考资料所指出的:
OLE DB.NET提供程序不支持用于传递的命名参数
由调用的SQL语句或存储过程的参数
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
放入中,而不是OleDbCommand
。
我还没有测试它,它可能包含一些小错误。除此之外,在那里打它,然后按play(F5)
有关OleDb
参数化的更多信息,请访问
祝您好运,并让我们知道发生了什么。再次检查您的字段和表名。它可能拼错了。查看它花了一点时间,但您的查询中有一个输入错误。字段名为[FUNCTION],因此需要在WHERE子句中修复该名称。谢谢史蒂夫!虽然文档是正确的,因为它们引用了整个OleDb集合,但我应该指出,使用ACE/JET提供程序的OleDb接受命名参数。这并不意味着可以按任何顺序添加参数。您仍然需要按照它们在commandtext中作为占位符出现的确切顺序放置它们。
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();
}