0

Windows フォーム GUI 内のプログレス バーの一部として、Excel 列内の一意のエントリの合計を取得しようとしています。それでも、以下の関数を呼び出すと、単一の行しか返されません。worksheet.rows.count を使用して、一意の「プロシージャ ID」エントリの合計を見つけています。

public static int procedureTotals(string excelFile) {
        string connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelFile
                            + ";Extended Properties='Excel 12.0;HDR=YES;'";
        string sql = null;
        string worksheetName = null;

        DataTable schema = null;
        DataTable worksheet = null;
        DataSet workbook = new DataSet();
        OleDbConnection objconn = new OleDbConnection(connection);
        objconn.Open();
        schema = objconn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
        worksheetName = schema.Rows[0]["Table_Name"].ToString();
        sql = "SELECT DISTINCT 'Procedure ID' FROM[" + worksheetName + "]";// GROUP BY 'Procedure ID'";
        //data adapter
        OleDbDataAdapter objAdapter = new OleDbDataAdapter();
        objAdapter.SelectCommand = new OleDbCommand(sql, objconn);
        objAdapter.Fill(workbook);
        worksheet = workbook.Tables[0];
        objconn.Close();

        return worksheet.Rows.Count;
    }
4

2 に答える 2

0

列ヘッダーを選択しているため、文字列のように引用符で囲んだため、1 つのレコード「プロデューサー ID」が返されます。

列名を空白のない単語 (Procedure_ID) に変更する必要があるため、単一引用符を使用する必要はありません。一重引用符を使用すると、検索にヘッダーを含めようとしているとシステムが判断し、1 行のみを返します >> ヘッダー。

正しいことを説明したことを願っています。

于 2014-05-16T20:59:43.997 に答える