Многие предприятия малого и среднего бизнеса работают с 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, являются их собственными. |