如何在C#中调用带参数的ACCESS查询???紧急求救啊~~~查询已经建好了:PARAMETERS RepDay DateTime;
SELECT ... FROM ... WHERE ReportDay = RepDay;请各位大侠不吝赐教~~~~~~在线等

解决方案 »

  1.   

    string strSql  = "select * from tb where name = '" + this.textBox.text + "'" 
    想这样? 
      

  2.   

    先引用access数据库的命名空间
    然后连接数据库
    进行查询呗
      

  3.   


    大侠们,刚才的问题你可能没理解我的意思,我的意思是:
    我在ACCESS数据库里已经建立了一个带参数的查询(类似SqlServer的存储过程),然后我要在C#代码里进行调用,传入参数,得到查询后的结果集~就是想实现这个功能,可是代码不知道怎么写
    请大侠们给指点指点呗~
      

  4.   

    大侠们,刚才的问题你可能没理解我的意思,我的意思是: 
    我在ACCESS数据库里已经建立了一个带参数的查询(类似SqlServer的存储过程),然后我要在C#代码里进行调用,传入参数,得到查询后的结果集~就是想实现这个功能,可是代码不知道怎么写 
    请大侠们给指点指点呗~
      

  5.   

    大侠们,刚才的问题你可能没理解我的意思,我的意思是: 
    我在ACCESS数据库里已经建立了一个带参数的查询(类似SqlServer的存储过程),然后我要在C#代码里进行调用,传入参数,得到查询后的结果集~就是想实现这个功能,可是代码不知道怎么写 
    请大侠们给指点指点呗~
      

  6.   

     string strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=../../MyDataBase.mdb;Jet OLEDB:Database Password=123456";
                OleDbConnection oeConn = new OleDbConnection(strConnection);
                oeConn.Open();
                string sql = string.Format("select * from tblAAA where A = '{0}'", "Filter");
                DataTable dt = new DataTable();
                OleDbDataAdapter adapter = new OleDbDataAdapter(sql, oeConn);
                adapter.Fill(dt);
                oeConn.Close();
                adapter.Dispose();这里这个DataTable dt 就已经填充数据库的数据了。你自己看着办吧。
      

  7.   

    你说的带参数的查询,只要在sql里面写上去就行了。string sql = string.Format("select * from tblAAA where A = '{0}'", "Filter"); 这条sql就是select * from tblAAA where A =  'Filter'Filter就是你的参数了。很简单,自己看看吧
      

  8.   

    不过楼主啊,我有一点不明白“我在ACCESS数据库里已经建立了一个带参数的查询(类似SqlServer的存储过程),”这个你是怎么实现的?我好像没去搞过
      

  9.   

    ACCESS没弄过,不明白,不过对于这种小型的、学习型的数据库,没必要搞存储过程等复杂的东西吧!?
      

  10.   

                OleDbConnection oeConn = new OleDbConnection(strConnection); 
                oeConn.Open(); 
                string sql ="SELECT * FROM table_Name WHERE ReportDay = ?RepDay; 
                OleDbCommand command=new OleDbCommand(sql,oeConn);
                command.Parameters.AddWithValue("RepDay", OleDbType.DateTime).Value = 你的时参数值;            
                DataTable dt = new DataTable(); 
                OleDbDataAdapter adapter = new OleDbDataAdapter(command); 
                adapter.Fill(dt); 
                oeConn.Close(); 
                adapter.Dispose(); 
      

  11.   

    纠正一下:OleDbConnection oeConn = new OleDbConnection(strConnection); 
                oeConn.Open(); 
                string sql ="SELECT * FROM table_Name WHERE ReportDay = ?"; 
                OleDbCommand command=new OleDbCommand(sql,oeConn); 
                command.Parameters.AddWithValue("@RepDay", OleDbType.DateTime).Value = 你的时间参数值;            
                DataTable dt = new DataTable(); 
                OleDbDataAdapter adapter = new OleDbDataAdapter(command); 
                adapter.Fill(dt); 
                oeConn.Close(); 
                adapter.Dispose(); 
      

  12.   

    继续纠正            OleDbConnection oeConn = new OleDbConnection(strConnection);
                oeConn.Open();
                string sql ="你的视图名称";
                OleDbCommand command=new OleDbCommand(sql,oeConn);
                command.Parameters.AddWithValue("@RepDay", OleDbType.DateTime).Value = 你的时间参数值;           
                DataTable dt = new DataTable();
                OleDbDataAdapter adapter = new OleDbDataAdapter(command);
                adapter.Fill(dt);
                oeConn.Close();
                adapter.Dispose(); 
      

  13.   

    根据楼上各位高手的意见,你把你ACCESS中已经写好的SQL语句改一改,然其调用变为可能。 string strConnection = "Provider=Microsoft.Jet.OleDb.4.0;";
                strConnection += @"Data Source=C:\BegASPNET\Northwind.mdb";            OleDbConnection objConnection = new OleDbConnection(strConnection);
                OleDbCommand comm = new OleDbCommand();            string sql = "把你在ACCESS中定义好的SQL语句引出来赋值";            comm.CommandText = sql;
                comm.Connection = objConnection;            comm.Parameters.Add();...//將你原SQL中的所有变量在这申明一下,就是加进去
                comm.Parameters[1].Value = 123;//当你要出入的时候,再通过赋值,传入进去。就可以了
      

  14.   

    这个access的问题太困扰我了,看了你的回复,我再把问题详细的和你说一遍吧:
    第一步,我在access数据里建了两个查询,查询aaa有一个参数,查询bbb有两个参数,这两个查询的代码分别如下:
    aaa:
    PARAMETERS RepDay DateTime;
    SELECT ......FROM ...... WHERE ReportDay = RepDay;
    (注:其中RepDay就是参数,执行这个查询的时候,只要给RepDay赋值,就能得到想要的结果集了)
    bbb:
    PARAMETERS StartDay DateTime, EndDay DateTime;
    SELECT ......FROM......
    WHERE ReportDay >= StartDay And ReportDay <= EndDay;
    (注:其中StartDay,EndDay 就是参数,执行这个查询的时候,只要给RepDay赋值,就能得到想要的结果集了)第二步,我在C#代码里(WINFORM程序)调用这两个查询得到我想要的结果集,调用第一个查询的代码如下:
    ......
    string sql = "EXEC aaa '2010-01-01'";//查询语句
    DataSet ds = new DataSet();//DataSet是表的集合
    OleDbDataAdapter da = new OleDbDataAdapter(sql, Connection);//从数据库中查询
    da.Fill(ds);//将数据填充到DataSet
    ......
    (注:连接数据库的代码省略了,'2010-01-01'就是赋给RepDay参数的值)
    这样能够执行成功,而且能得到正确的结果集.但是,但是,但是,但是,但是,但是,但是,但是,但是
    我用同样的用法去调用第二个查询,代码如下:
    ......
    string sql = "EXEC bbb '2010-01-01','2010-01-10'";
    DataSet ds = new DataSet();//DataSet是表的集合
    OleDbDataAdapter da = new OleDbDataAdapter(sql, Connection);//从数据库中查询
    da.Fill(ds);//将数据填充到DataSet
    ......
    得到的ds总是空的,查不出应该有的数据
    (注:数据库里有数据,就是查不出来)大侠给俺分析分析救救急~~~~望请不吝赐教~万分感谢~
      

  15.   

    下面是调用bbb的示例
    AAA的你参照改一下就行,少传一个参数就可以了            OleDbConnection conn = new OleDbConnection();
                conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\My Documents\db2.mdb;User Id=admin;Password=;";
                conn.Open();            OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = conn;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = "test";       //这里是你查询的名称就行了,例如你的aaa或bbb            //ACCESS参数要注意:
                //并不是按照名称匹配的,而是按照传入的顺序匹配的
                OleDbParameter para1 = new OleDbParameter( "@StartDay", OleDbType.Date );
                para1.Value = new DateTime( 2009, 1, 2 );        //假设日期为2010-01-01
                cmd.Parameters.Add( para1 );            OleDbParameter para2 = new OleDbParameter( "@EndDay", OleDbType.Date );
                para2.Value = new DateTime( 2009, 1, 15 );        //假设日期为2010-01-01
                cmd.Parameters.Add( para2 );            DataSet ds = new DataSet();
                OleDbDataAdapter da = new OleDbDataAdapter( cmd );
                da.Fill( ds );            conn.Close();
      

  16.   


    试了一下,可以实现我要的效果.谢谢了
    不过我稍微简化了一些
    ......
    DataSet ds = new DataSet();
    OleDbCommand command = new OleDbCommand(str_QueryName, Connection);
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.AddWithValue("@StartDay", OleDbType.Date).Value = str_StartDay;
    command.Parameters.AddWithValue("@EndDay", OleDbType.Date).Value = str_EndDay;
    OleDbDataAdapter adapter = new OleDbDataAdapter(command);
    adapter.Fill(ds);
    ......
    应该是和你给的代码一个效果的.虽然解决了,但是你可以给我分析分析我刚开始的代码为什么会查询不出结果呢?????愁人~
      

  17.   

    把你原来的换成
    string sql = "EXEC bbb #2010-01-01#,#2010-01-10#"; 
    试试
      

  18.   

    我用你的方法可以得到结果!
    问题没出在语句上            OleDbConnection olecon = new OleDbConnection("......");            try
                {
                    olecon.Open();                string sql = "EXEC aaa '2010-01-03','2010-01-08'";
                    DataSet ds = new DataSet();
                    OleDbDataAdapter da = new OleDbDataAdapter(sql, olecon);
                    da.Fill(ds);            }
                catch
                {
                   
                }得到3个记录ds.Tables[0].Rows.Count=3
    找其他原因吧http://www.mybuffet.cn
      

  19.   


    不会吧,数据库里有数据,直接执行查询也能查出来数据,就是用"EXEC aaa '2010-01-03','2010-01-08'"; 得不到结果 真郁闷人啊~
    我再找找看有没有别的原因
      

  20.   

    你的ACCESS是什么版本的
    我的测试版本是ACCESS2000、VS2008
      

  21.   

    我是ACCESS2003+VS2005 应该和这个关系不大,你试试我刚开始的方法在你的环境下可以正常执行不?刚才24楼说用我那几句话可以得到正确的结果 我纠结了~~~~~~~~~
    你试试在你那能不能行得通这几句
    ......
    string sql = "EXEC aaa '2010-01-03','2010-01-08'"; 
    DataSet ds = new DataSet(); 
    OleDbDataAdapter da = new OleDbDataAdapter(sql, olecon); 
    da.Fill(ds); 
    ......
      

  22.   

    支持下,刚也遇到这种问题,不过我的问题简单,打算用DATATABLE去操作,干活~