你不要用命名的参数,要用占位符,因为OLE DB .NET Framework 数据提供程序和 ODBC .NET Framework 数据提供程序不支持用于将参数传递到 SQL 语句或存储过程的命名参数。在此情况下,必须使用问号 (?) 占位符,如下为正的:
string strSql = "SELECT name,id FROM users WHERE id =?";//注意这里的'?'号
string strConnect = "Provider = SQLOLEDB;Data Source=(local);Initial Catalog=test;Integrated Security=SSPI";
OleDbConnection cn = new OleDbConnection(strConnect);
cn.Open();
OleDbCommand cmd = new OleDbCommand(strSql,cn);
cmd.Parameters.Add("@nameid",OleDbType.VarChar,8);
cmd.Parameters[0].Value = "5";
OleDbDataReader rdr;
rdr = cmd.ExecuteReader();
int intName = rdr.GetOrdinal("name");
while (rdr.Read())
{
if (rdr.HasRows)
{
System.Console.WriteLine(rdr.GetString(intName));
}
}
你试试先.
string strSql = "SELECT name,id FROM users WHERE id =?";//注意这里的'?'号
string strConnect = "Provider = SQLOLEDB;Data Source=(local);Initial Catalog=test;Integrated Security=SSPI";
OleDbConnection cn = new OleDbConnection(strConnect);
cn.Open();
OleDbCommand cmd = new OleDbCommand(strSql,cn);
cmd.Parameters.Add("@nameid",OleDbType.VarChar,8);
cmd.Parameters[0].Value = "5";
OleDbDataReader rdr;
rdr = cmd.ExecuteReader();
int intName = rdr.GetOrdinal("name");
while (rdr.Read())
{
if (rdr.HasRows)
{
System.Console.WriteLine(rdr.GetString(intName));
}
}
你试试先.
成功了!也就是说sql语句的参数只能用?来代替?而不能用@__的形式?不管是查询语句还是存储过程吗?
这是在用SqlConnection时用的“@",oledb用“?”代替,