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

1
sql = "SELECT DISTINCT 'Procedure ID' FROM[" + worksheetName + "]";

在这里,您只检索一列数据。请将查询更新为

sql = "SELECT DISTINCT * FROM [" + worksheetName + "]";

试试这个.. :)

于 2013-04-09T06:14:03.137 回答
0

您正在选择列标题,因此它返回一条记录“生产者 ID”,因为您在它周围加上引号,就好像它是一个字符串一样。

您将不得不将列名更改为无空格的单词 (Procedure_ID),因此您不需要单引号。当您使用单引号时,系统认为您正在尝试在搜索中包含标题并仅返回一行 >> 标题。

我希望我解释正确。

于 2014-05-16T20:59:43.997 回答