string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ this.path.Text.ToString().Trim();
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();  
OleDbCommand cmd=new OleDbCommand ();
cmd.Connection =conn;
cmd.CommandText = "select ID from Card";
for(int i= 0;i<cmd.ExecuteNonQuery();i++)
{
                               ............
                            }
我断点调试的时候发现cmd.ExecuteNonQuery()是0的,Access文件的位置没有错的,是怎么回事呢?
谢谢

解决方案 »

  1.   

    不应该把 cmd.ExecuteNonQuery() 放在循环中, 至少要改为:using System;
    using System.Data.OleDb;class Test
    {
      static void Main()
      {
        string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + "P.mdb";
        OleDbConnection conn = new OleDbConnection(strConn);
        conn.Open();
        OleDbCommand cmd= new OleDbCommand();
        cmd.Connection = conn;
        cmd.CommandText = "select ID from Card";
        int n = cmd.ExecuteNonQuery();
        for(int i= 0; i < n; i++)
        {
          Console.WriteLine(i);
        }
      }
    }
      

  2.   

    for(int i= 0;i<cmd.ExecuteNonQuery();i++)
    你这么用不对:cmd.ExecuteNonQuery()返回的不是查询的结果集,而是返回执行Sql所影响的行数。
    是用于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。
    对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。应该这样:
    OleDbDataReader oDataReader = cmd.ExecuteReader();
    while(oDataReader.Read())
    {
        int id = (int)oDataReader.GetValue(0);
        for(int i=0; i<id; i++)
        {
          //TODO: ...
        }
    }
      

  3.   

    // 这样就可以了using System;
    using System.Data.OleDb;class Test
    {
      static void Main()
      {
        string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + "P.mdb";
        OleDbConnection conn = new OleDbConnection(strConn);
        conn.Open();
        OleDbCommand cmd= new OleDbCommand();
        cmd.Connection = conn;
        cmd.CommandText = "SELECT COUNT(ID) FROM Card";
        int n = (int)cmd.ExecuteScalar();
        for(int i= 0; i < n; i++)
        {
          Console.WriteLine(i);
        }
      }
    }
      

  4.   

    // fangxinggood(JustACoder)正解, 整理如下:using System;
    using System.Data.OleDb;class Test
    {
      static void Main()
      {
        string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + "P.mdb";
        OleDbConnection conn = new OleDbConnection(strConn);
        conn.Open();
        OleDbCommand cmd  = new OleDbCommand();
        cmd.Connection    = conn;
        cmd.CommandText   = "SELECT ID FROM Card";
        OleDbDataReader r = cmd.ExecuteReader();
        while (r.Read())
        {
          int id = r.GetInt32(0);
          Console.WriteLine(id);
        }
      }
    }