C# 读取access时,如果直接返回GetOleDbSchemaTable 读取的 DataTable,行数返回值不对,
还是要用adapter, 得到DataTable, 然后可以得到正确的行数返回值,这样程序更合理。
public static string[] read_a_Col_from_oneRowDataTable(string _connectionstr, string _tablename, string _colname)
{
string result = "";
List<string> list = new List<string>();
string strSQL = "SELECT * FROM " + _tablename;
using (OleDbConnection connection = new OleDbConnection(_connectionstr))
{
OleDbCommand command = new OleDbCommand(strSQL, connection);
OleDbDataAdapter adp = new OleDbDataAdapter(strSQL, connection);
try
{
connection.Open();
//DataTable dt = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, _tablename, null });
//DataTable dt = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, _tablename, _colname});// num_row 0
//dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, tableName, "TABLE" });
//con.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, tableName, columnName });
DataTable dt = new DataTable();
adp.Fill(dt);
int num = dt.Rows.Count;
MessageBox.Show(num.ToString());
using (OleDbDataReader reader = command.ExecuteReader())
{
for (int i = 0; i < num; i++)
{
reader.Read(); // nur ein mal read
result = reader[_colname].ToString();
list.Add(result);
}
}
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message);
}
}
return list.ToArray();
}