以前一直用oledb连接access,用sqlclient连接sql server,SQL语句的参数传递都类似于这样:        cmd = New OleDb.OleDbCommand("select * from member where userID=@userID and pwd=@pwd and status='display' and (memberlevel='super' or memberlevel='admin')", conn)
        cmd.Parameters.AddWithValue("@userID", Trim(txtboxUserID.Text))
        cmd.Parameters.AddWithValue("@pwd", myClass1.Encrypt(txtboxPassword.Text.Trim))        conn.Open()
        dr = cmd.ExecuteReader()
今天想用oledb连接SQL Server,但就出现这样的错误:必须声明变量 '@userID'。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OleDb.OleDbException: 必须声明变量 '@userID'。
很奇怪,在网上也搜索了一下,有人说:.Net   SDK:     
  -----------------------   
  如果   CommandType   设置为   Text,OLE   DB   .NET   提供程序不支持将参数传递给   OleDbCommand   调用的   SQL   语句或存储过程的命名参数。在这种情况下,必须使用问号   (?)   占位符。例如:   
    
  SELECT   *   FROM   Customers   WHERE   CustomerID   =   ?   

但是用oledb连接access,用sqlclient连接sql server为什么就可以,而用oledb连接sql server就出错呢?

解决方案 »

  1.   

    但是用oledb连接access,用sqlclient连接sql server为什么就可以,而用oledb连接sql server就出错呢? 
    连接方式样不太一样吧。我记得sql的对象连sql server要比oledb连接少几步操作。
      

  2.   

    using System.Data.SqlClient;SqlConnection conn = new SqlConnection();
    conn.ConnectionString = "...........";
    SqlCommand cmd = new SqlCommand();
    conn.Open() ;
    cmd.Connection = conn;
    cmd.CommandText = "select * from member where userID=@userID and pwd=@pwd and status='display' and (memberlevel='super' or memberlevel='admin')";        
    cmd.Parameters.AddWithValue("@userID", Trim(txtboxUserID.Text)) 
    cmd.Parameters.AddWithValue("@pwd", myClass1.Encrypt(txtboxPassword.Text.Trim))         
    cmd.ExecuteReader();
    conn.Close();
      

  3.   

    using System;
    using System.Data;
    using System.Data.OleDb;public class Prepare {    
     public static void Main () { 
       String connect = "Provider=Microsoft.JET.OLEDB.4.0;data source=.\\Employee.mdb";
       OleDbConnection con = new OleDbConnection(connect);
       con.Open();  
       Console.WriteLine("Made the connection to the database");   OleDbCommand cmd1 = con.CreateCommand();
       cmd1.CommandText = "SELECT ID FROM Employee "
                        + "WHERE id BETWEEN ? AND ?";
       OleDbParameter p1 = new OleDbParameter();
       OleDbParameter p2 = new OleDbParameter();
       cmd1.Parameters.Add(p1);
       cmd1.Parameters.Add(p2);
       p1.Value = "01";
       p2.Value = "03";
       OleDbDataReader reader = cmd1.ExecuteReader();
       while(reader.Read()) 
         Console.WriteLine("{0}", reader.GetInt32(0));
       reader.Close();
       con.Close();
     }
    }It is little ugly!
      

  4.   

    2楼的是用sqlclient来连接sql server,是可以的,就象用oledb连接access一样。我现在的问题是用oledb连接sql server就会出问题,不知道为什么。