目前情况是这样地:
数据库为:access 不支持储过程..
使用VS2005新的特性 强类型Dataset.新建一个TableAdapter 后需要建其它SQl语句.问题来了.
目前只知道需要传参数只能通过这样的SQL语句写法:
 select * from user where age >? 
这样自动会生成一个方法名为:xxx(age)查询
但如果需要实现:select top 100 * from user where age in (20,30)这样的语句就不能以:
select top ? from user where age in(?) 或
select top ? from user where age in (?,?) 
查过不少资料好像还是不行..这种情况很多都是通过储过程实现.有人知道吗???

解决方案 »

  1.   

    access 中 user为关键字 试试[user]
      

  2.   


    dim s as string="20,30"
    dim i as int32=100sql="select top "& i & " * from tb where age in (" & s &")"这样可以吧
      

  3.   

    哦是不是我弄错了意思
    你是说access参数化参数下查询吧?在VB下我做过,asp.net还下没弄过,手边没有代码,明天上班找一下
      

  4.   

    楼上各位好像都弄错了...我指在VS2005中使用 强类型Dataset时的查询..
      

  5.   

    TO: vbman2003(家人)
    这个到不知道.可不可行...
    先在ACCESS中建好参数化查询.再在VS2005的强类型Dataset中使用
      

  6.   

    TO: vbman2003(家人)
    这个到不知道.可不可行...
    先在ACCESS中建好参数化查询.再在VS2005的强类型Dataset中使用
    --------------------
    我明白你的意思,比如在access查询页中建立一个查询:select * from tb where id=?
    然后在程序中象调用存储过程一样,传入参数,返回dataset
    VB中可以通过,要用关键字指定调用的是参数查询,调用方法和SQL的存储过程一样。因为才转.NRT,没试过。我想应该可以吧
      

  7.   

    上MSDN上查了一下,似乎比VB中还简单:
    [Visual Basic] 
    Dim sql As String = "SELECT * FROM Table1 WHERE Field1 LIKE ?"
    Dim cmd As OleDbCommand = New OleDbCommand(sql, oracleConn)
    cmd.Parameters.Add("@p1", OleDbType.Char, 3).Value = "a"
    Dim dr As OleDbDataReader = cmd.ExecuteReader()
    [C#] 
    string sql = "SELECT * FROM Table1 WHERE Field1 LIKE ?";
    OleDbCommand cmd = new OleDbCommand(sql, oracleConn);
    cmd.Parameters.Add("@p1", OleDbType.Char, 3).Value = "a";
    OleDbDataReader dr = cmd.ExecuteReader();我在vs2005试了一下:
    在access中建立一个名称为q_tb的查询:select * from tb where ID=@1
    vb.net代码:
            Dim sConnect As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\test_db.mdb"
            Dim cn As OleDbConnection = New OleDbConnection(sConnect)
            Dim cmd As OleDbCommand = New OleDbCommand("q_tb", cn)
            Dim p As Integer = 3
            cn.Open()
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add(New OleDbParameter("@1", OleDbType.BigInt, 4)).Value = p
            Dim dr As OleDbDataReader = cmd.ExecuteReader()
            While dr.Read()
                Console.WriteLine(dr.Item(1))
            End While
            dr.Close()
            cn.Close()
    返回结果正确
    据我以往所知,access参数化查询中给参数赋值,如果有多个参数,则先后次序不能颠倒,不然很可能出错
      

  8.   

    TO :vbman2003(家人) 谢谢这台朋友,继续看看人家意见
      

  9.   

    TO: vbman2003
    我试了在access 里建查询
    select top a  * from [user] order by b
    不行.语法不对