Многие предприятия малого и среднего бизнеса работают с QuickBooks для их модуля учета. Точно так же многие компании также используют Sage для своего учета. Большинство из них сталкиваются с проблемой, когда им необходимо экспортировать данные из этих систем.
Многие из доступных в сети разъемов являются дорогостоящими и не соответствуют точным требованиям. Прилагаются небольшие фрагменты кода, которые объясняют, что было сделано для экспорта их данных в CSV. Я также приложил ссылки GitHub для загрузки кода.
И SAGE, и Quickbooks поставляются с драйверами ODBC, которые можно настраивать и программно запрашивать.
#Sage
Создайте тихий ODBC DSN в вашем источнике данных ODBC.
Настройте бесшумный режим на вкладке «Параметры».
Теперь мы будем использовать источник данных ниже для загрузки и экспорта данных.
Мы собираемся в DotNet Core написать наш код как лучший язык для общения с DSN в Windows.
Я разбил проблему на 3 части
- Загрузить TableNames из базы данных
- Загрузить DataSet для каждой таблицы
- Экспорт каждой таблицы в CSV из DataSet
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
private static List loadTableNames(string connectionString){ var tableNames = new List(); using (OdbcConnection connection = new OdbcConnection(connectionString)) { try { connection.Open(); using(DataTable tableschema = connection.GetSchema("Tables")) { // first column name foreach(DataRow row in tableschema.Rows) { tableNames.Add(row["TABLE_NAME"].ToString()); //Console.WriteLine(row["TABLE_NAME"].ToString()); } } } catch (Exception ex) { Console.WriteLine(ex.Message); } } return tableNames; } |
Теперь нам нужно написать код для загрузки данных для данной таблицы. Я собираюсь использовать DataSet в этом случае. Есть много способов сделать это ..
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
public static DataSet GetDataSetFromAdapter( DataSet dataSet, string connectionString, string queryString) { using (OdbcConnection connection = new OdbcConnection(connectionString)) { OdbcDataAdapter adapter = new OdbcDataAdapter(queryString, connection); // Open the connection and fill the DataSet. try { connection.Open(); adapter.Fill(dataSet); } catch (Exception ex) { Console.WriteLine(ex.Message); } // The connection is automatically closed when the // code exits the using block. } return dataSet; } |
И, наконец, ниже функция экспорта всех данных в CSV
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
<span id="mce_SELREST_start" style="overflow:hidden;line-height:0;"></span> private static string ConvertToCSV(DataSet objDataSet) { StringBuilder content = new StringBuilder(); if (objDataSet.Tables.Count >= 1) { DataTable table = objDataSet.Tables[0]; if (table.Rows.Count > 0) { DataRow dr1 = (DataRow) table.Rows[0]; int intColumnCount = dr1.Table.Columns.Count; int index=1; //add column names foreach (DataColumn item in dr1.Table.Columns) { content.Append(String.Format("\"{0}\"", item.ColumnName)); if (index < intColumnCount) content.Append(","); else content.Append("\r\n"); index++; } //add column data foreach (DataRow currentRow in table.Rows) { string strRow = string.Empty; for (int y = 0; y <= intColumnCount - 1; y++) { strRow += "\"" + currentRow[y].ToString() + "\""; if (y = 0) strRow += ","; } content.Append(strRow + "\r\n"); } } } return content.ToString(); } |
https://github.com/ashwinrayaprolu1984/SageDataExporter.git
#QuickBooks
Мы придерживаемся того же подхода для QuickBooks.
- Загрузить имена таблиц из файла (Quickbooks не экспортирует схему в свой источник данных ODBC)
- Загрузить DataSet для каждой таблицы
- Экспорт каждой таблицы в CSV из DataSet
Ниже ссылка в Git Hub есть код для этого
https://github.com/ashwinrayaprolu1984/QuickBooksDesktopConnector.git
| Опубликовано на Java Code Geeks с разрешения Эшвина Кумара, партнера нашей программы JCG . Смотрите оригинальную статью здесь: QuickBooks и Sage Data Exporter
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |

