Я написал некоторый код, который должен добавить ответ базы данных в список.он работает на моем ПК, но не работает при развертывании моей программы на другом ПК.Я придавил свой метод.Он перестает работать, когда он нажимает
int tot = rs.Fields.Count;
Вот мой код:
public static List<List<String>> QUERY(String query, String dbPath)
{ ADODB.Connection cn = new ADODB.Connection();
ADODB.Recordset rs = new ADODB.Recordset(); ADODB.Command cmdSQLData = new ADODB.Command();
List<List<String>> RETURNME = new List<List<String>>();
string cnStrOld = "Driver={Microsoft Access Driver (*.mdb)}; Dbq=" + dbPath + ";Uid=;Pwd=;"; //does not work
string cnStr = @"Provider=Microsoft.JET.OLEDB.4.0; data source=" + dbPath;
cn.ConnectionTimeout = 0;
cn.Open(cnStr);
cn.CommandTimeout = 0;
rs.Open(query, cn);
while (rs.EOF == false) //GET HEADERNAMES, ADD TO LIST
{
List<String> A = new List<string>();
int tot = rs.Fields.Count;// calculating the amount of columns in the RS
for (int i = 0; i < tot; i++) //iterating through all columns and checking it's name
{
A.Add(rs.Fields[i].Name.ToString());
}
RETURNME.Add(A);
break;
}
while (rs.EOF == false)//GET DATA, ADD TO LIST
{
List<String> B = new List<string>(); //list of Data
int tot = rs.Fields.Count;// calculating the amount of columns in the RS
//Now we add query response
for (int i = 0; i < tot; i++) //iterating through all columns and checking it's name
{
B.Add(rs.Fields[i].Value.ToString());
}
RETURNME.Add(B);
rs.MoveNext();
}
rs.Close();
cn.Close();
return RETURNME;
}
Я использую относительные пути, и они проверены ОК.У меня также есть свои пробные уловки (я удалил их отсюда, чтобы уменьшить код), и они не указывают на ошибки.Каким-то образом программа способна войти в оператор while (rs.EOF == false), поэтому я предполагаю, что записи возвращены?
Не могли бы вы помочь?
Я получил следующее решение:
public static List<List<String>> QUERY_TEST(String query, String dbPath)
{
List<List<String>> RETURNME = new List<List<String>>();
String cnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbPath + ";Jet OLEDB:Database Password=;";
OleDbDataAdapter Data1 = new OleDbDataAdapter(query, cnStr);
DataSet a = new DataSet();
Data1.Fill(a);
DataTable dt = a.Tables[0];
//Adding column names to the first row on the list
List<String> B = new List<string>();
foreach (DataColumn dr in dt.Columns)
{
List<String> A = new List<string>();
B.Add(dr.Caption.ToString());
}
RETURNME.Add(B);
//Adding data to the columns
foreach (DataRow dr in dt.Rows)
{
List<String> A = new List<string>();
for (int i = 0; i < dt.Columns.Count; i++)
{
A.Add(dr[i].ToString());
}
RETURNME.Add(A);
break;
}
return RETURNME;
}