最近在个一家轮胎外贸公司写个小管理程序,我负责整理他们的烂摊子,他们以前长期用的一个工作流程生成的一个十分蛋疼的表结构数据库是Access数据库,我好不容易把需要的信息用access的查询整理起来,结果在.net里用oledbdatareader对象操作居然没结果返回,但是在access里对查询进行查询却有2000多个结果,在.net里操作表也有结果就是不能操作查询,请高人指点,在线等

解决方案 »

  1.   

    第一、是否打开了数据库的链接open();
    第二、sql语句是否正确;
    第三、获取adapter对象的方式是否正确。
      

  2.   

    是否open
    try catch
    连接字符串
      

  3.   

    <appSettings>
        <add key="TireAccess" value="provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|GTC05415Samson.mdb;Jet OLEDB:Database Password=123456"/><!--轮胎信息数据库连接-->
        <add key="SystemAccess" value="SystemDB.mdb"/><!--系统数据库连接-->
      </appSettings>
    这是连接没问题
     public class ShipMentInfoService : ShipMentInfo
        {
            #region 查询
           
           /// <summary>
           /// 返回未发货的客户名称
           /// </summary>
           /// <returns>客户名称集合</returns>
            public List<string> GetAllCustomer() 
            {
                string constr = ConfigurationManager.AppSettings["TireAccess"].ToString();
                string sql = "select customer,count(*) from(select * from (SELECT [Release Information].ReleaseID, [Release Information].customer, [Release Details].[order#], [Release Details].release_no, [Release Information].address, [ERP Information].erp, [Release Details].cat_no, [Release Details].qty, ([Basic Information of Tires].[design for dl]+'('+[Basic Information of Tires].[supply]+')') AS description, [Release Details].[price issue], (IIf([Release Details].[qty]>=0,[Release Details].[qty]*[Basic Information of Tires].[tire weight(kg) all],\"\")) AS [Net Wt/kgs], [Basic Information of Tires].[D40'Quantity], [Tire Type].Typename FROM [Tire Type] INNER JOIN ([Release Information] INNER JOIN ([Basic Information of Tires] INNER JOIN ([Release Details] INNER JOIN [ERP Information] ON [Release Details].Cat_No = [ERP Information].[Cat#]) ON [Basic Information of Tires].Cat_No = [Release Details].Cat_No) ON [Release Information].ReleaseID = [Release Details].ReleaseID) ON [Tire Type].Type = [Basic Information of Tires].Type) where [release_no] like '*NV' ) group by customer";//获得所有未发货用户极其订单数量
                 OleDbConnection con=null;
                 OleDbDataReader dr = null;
                List<string> customer = new List<string>();
                try
                {
                    con = new OleDbConnection(constr);
                    OleDbCommand cmd = new OleDbCommand(sql, con);
                    con.Open();
                    dr = cmd.ExecuteReader();
                    
                    while (dr.Read()) 
                    {
                        string subcustomer = Convert.ToString(dr[0]);
                        customer.Add(subcustomer);
                    }
                }
                catch(Exception ex)
                {
                
                
                }
                finally
                {
                    dr.Close();
                    dr.Dispose();
                    con.Close();
                    con.Dispose();
                }
                return customer;
            }
    这是具体执行代码,
    select  customer,count(customer) from (select * from shipmentinfo where [release_no] like '*NV') group by customer
    这是查询的语句,其中shipmentinfo 不是表是access里的查询
      

  4.   

      /// <summary>
           /// 返回未发货的客户名称
           /// </summary>
           /// <returns>客户名称集合</returns>
            public List<string> GetAllCustomer() 
            {
                string constr = ConfigurationManager.AppSettings["TireAccess"].ToString();
                string sql = "select  customer,count(customer) from (select * from shipmentinfo where [release_no] like '*NV') group by customer";
                 OleDbConnection con=null;
                 OleDbDataReader dr = null;
                List<string> customer = new List<string>();
                try
                {
                    con = new OleDbConnection(constr);
                    OleDbCommand cmd = new OleDbCommand(sql, con);
                    con.Open();
                    dr = cmd.ExecuteReader();
                    
                    while (dr.Read()) 
                    {
                        string subcustomer = Convert.ToString(dr[0]);
                        customer.Add(subcustomer);
                    }
                }
                catch(Exception ex)
                {
                
                
                }
                finally
                {
                    dr.Close();
                    dr.Dispose();
                    con.Close();
                    con.Dispose();
                }
                return customer;
            }
    这个是直接调用查询,上面那个是查询里的具体内容
      

  5.   

    主要是查询表有结果,查询access里的查询就没结果,但是同样的sql语句在office access 里直接可视化操作却有2000多个结果,难道.net只能操作access的表不能操作查询?
      

  6.   

    那你把查询代码放在.net中不就行了。
      

  7.   

    试过了不行,一样没结果,后来发现是由于代码的兼容,但是我实在看不出我的查询代码有什么不妥,除了有点长就是多了个iif函数,
      

  8.   

    试试把Access的查询作为存储过程使用!
      

  9.   

    额 access可以建立存储过程啊!教教我!要是可以就开心了
      

  10.   

    Access本身没有存储过程,但有查询。  
    Access使用的是Jet-SQL,与SQL Server使用的T-SQL差别很大
    http://topic.csdn.net/u/20100530/18/12b442ea-b5cd-4e13-bac7-ec7f3fc40ddd.html
      

  11.   

    很明显,就是查询出错了,被try 语句给隐瞒了错误。
      

  12.   


    非常有可能,楼主乱用 catch,这代码将来也是个烂摊子
      

  13.   

    在string subcustomer = Convert.ToString(dr[0]);打个断点看