我一直都是对sql数据库进行参数化查询,今天突然对于access进行查询,才发现原来不是用那种方法,我查了一下,都是使用?,例如 sql="select * from newss where username=? order by id"
 //注意查询的条件均用?号表示
 OleDbConnection conn = new OleDbConnection(connString);
 OleDbCommand cmd = new OleDbCommand(sql,conn);
 OleDbParameter parm = new OleDbParameter("temp",OleDbType.VarChar, 50);
  //temp为Parameter对象可随便定义,OleDbType.VarChar指定为字符串,长度50
 parm.Direction = ParameterDirection.Input;
 //指定其类型输入参数
 cmd.Parameters.Add(parm);但是对于这个查询,我有一些疑问,如果有多个参数怎么办呢?他们都是问号,这样根本无法识别那个参数是对应哪个啊?
例如sql="select * from newss where username=? and id=? order by id"
这个我们该怎么办呢?我在网上搜了一下,所有的解答都是复制一篇博客的

解决方案 »

  1.   

    ?是参数占位符,多个参数出现的次序(从左往右)一一对应Parameters集合里的元素。
      

  2.   

    比如sql="select * from newss where username=? and id=? order by id"
    cmd.Parameters.AddWithValue("?",TextBoxUserName.Text.Trim());//给username指定参数
    cmd.Parameters.AddWithValue("?",Request["id"].Trim());//给id指定参数
      

  3.   

    那我这样写对吗
    string query = "select * from News where ID= ?";
                OdbcHelper helper = new OdbcHelper();
                System.Data.OleDb.OleDbParameter para = new System.Data.OleDb.OleDbParameter("?",id);
                System.Data.OleDb.OleDbParameter[] parameters ={para};
    //自定义的方法
                System.Data.DataSet data= helper.ExcuteQuery(query,parameters);
      

  4.   

            /// <summary>
            /// 执行查询,并且返回dataset对象
            /// </summary>
            /// <param name="query"></param>
            /// <param name="con"></param>
            /// <param name="parameter">查询字符串的参数数组</param>
            /// <returns></returns>
            public DataSet ExcuteQuery(string query, OleDbParameter []parameters)
            {
                DataSet data = null;
                using (OleDbConnection con = ConOpen(conStr))
                {
                    using (OleDbCommand cmd = new OleDbCommand(query, con))
                    {
                        con.Open();
                        //像查询语句添加参数
                        foreach (OleDbParameter parameter in parameters)
                        {
                            cmd.Parameters.Add(parameter);
                        }
                        //OdbcDataReader reader= cmd.ExecuteReader();
                        using (OleDbDataAdapter adapter = new OleDbDataAdapter(cmd))
                        {
                            try
                            {
                                adapter.Fill(data);
                            }
                            catch
                            {
                                return null;
                            }
                        }
                    }
                }
                return data;
            }
      

  5.   

    你可以
    query="select * from newss where username=@username and id=@id order by id"
    OleDbCommand cmd = new OleDbCommand(query, con)
    cmd.Parameters.AddWithValue("@username","xx")
    cmd.Parameters.AddWithValue("@id","yy")改成问号也是可以的,但此时要注意顺序
    query="select * from newss where username=? and id=? order by id"
    OleDbCommand cmd = new OleDbCommand(query, con)
    cmd.Parameters.AddWithValue("username","xx")
    cmd.Parameters.AddWithValue("id","yy")
      

  6.   

    可是按照你上面的第一个方法query="select * from newss where username=@username and id=@id order by id"显示是无法查询的,查询语句错误,我试过了,不知道为什么?第二种方法是可以的
      

  7.   

    我用的是access数据库啊……Microsoft access2010
      

  8.   

    没有那么麻烦的,我也遇到类似的问题,已经解决并记录,你可以参考一下这篇文章也许对你有帮助
    http://blog.csdn.net/limengqilove/article/details/7660559