powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Универсальная выгрузка из mssql в dbf
5 сообщений из 5, страница 1 из 1
Универсальная выгрузка из mssql в dbf
    #40017574
Kolu4ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Разрабатываю приложение, которое выполняет хранимку на ms sql server 2014, хранимка возвращает несколько наборов данных которые потом следует сохранить в разные таблицы dbf. Есть желание создать какой-то универсальный инструмент по выгрузке, а не прописывать форматы полей жестко или использовать пустые dbf под свой набор. Планировала так - в ms sql создается таблица
Код: sql
1.
Create table #info (#tblname varchar (255), ls varchar(12), address varchar(100), summa decimal(8,2), period decimal(2,0))


Первое поле для названия конечной таблицы в dbf.
затем в шарпе забираю набор данных
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
      DataSet ds = new DataSet();
            using (SqlConnection cn = new SqlConnection(connString))
            {
                cn.Open();
                using (SqlCommand comm = cn.CreateCommand())
                {
                    comm.CommandText = procname;
                    comm.CommandType = CommandType.StoredProcedure;
                    comm.CommandTimeout = 0;
                    if (param != null)
                        comm.Parameters.AddRange(param.ToArray());
                    SqlDataAdapter da = new SqlDataAdapter(comm);
                    da.Fill(ds);
                }
                cn.Close();
            }


На основе информации о столбцах в DataTable хочу создать команду для Microsoft.Jet.OLEDB
Код: sql
1.
Create table tblname (ls char(12), address char(100), summa numeric(8,2), period numeric(2,0))


И вот тут ничего не получилось, несмогла получить размерность поля из DataTable.Columns[0].DataType. Сейчас для решения задачи вижу только тип и размерность поля запихивать в название, а потом парсить Что-то типа
Код: sql
1.
Create table #info (#tblname varchar (255), [ls(c12)] varchar(12), [address(c100)] varchar(100), [summa(n8-2)] decimal(8,2), [period(n8-0)] decimal(2,0)) 


Существует ли возможность получать размерность текстового поля и других полей из DataTable? Ну или может есть другое решение задачи.
...
Рейтинг: 0 / 0
Универсальная выгрузка из mssql в dbf
    #40017660
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kolu4ka,

вам нужно получить схему таблицы

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
using (var cn = new SqlConnection(connection_string))
using (var cmd = new SqlCommand("select * from [dbo].[myTable]", cn))
{
    cn.Open();
    using (var reader = cmd.ExecuteReader())
    using (var schema= reader.GetSchemaTable())
    {
        foreach (DataRow row in schema.Rows)
        {
            string column = row.Field<string>("ColumnName");
            string type = row.Field<string>("DataTypeName");
            short precision = row.Field<short>("NumericPrecision");
            short scale = row.Field<short>("NumericScale");
            Console.WriteLine("column: {0} Type: {1} Precision: {2} Scale: {3}", column, type, precision, scale);
        }
    }
}
...
Рейтинг: 0 / 0
Универсальная выгрузка из mssql в dbf
    #40017690
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Kolu4ka,

вам нужно получить схему таблицы

У ТСа нет таблицы, есть ХП, возвращающая несколько резалтсетов.
Можно не заполнять DataSet адаптером, а просто последовательно вытащить все наборы и их схемы:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
static IEnumerable<(DataTable data, DataTable schema)> GetDataAndSchemas()
{
  using (var cnn = new SqlConnection("Data Source=.;Initial Catalog=master;Integrated Security=True"))
  using (var cmd = new SqlCommand("sp_helplogins", cnn)
  {
    CommandType = CommandType.StoredProcedure
  })
  {
    cnn.Open();
    cmd.Parameters.AddWithValue("@LoginNamePattern", $@"{Environment.UserDomainName}\{Environment.UserName}");
    using (var reader = cmd.ExecuteReader())
    {
      do
      {
        var schema = reader.GetSchemaTable();
        var dt = new DataTable();
        dt.Load(reader);
        yield return (dt, schema);
      } while (!reader.IsClosed);
    }
  }
}
...
Рейтинг: 0 / 0
Универсальная выгрузка из mssql в dbf
    #40017794
Kolu4ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята спасибо! Схема это то, что было нужно!
...
Рейтинг: 0 / 0
Универсальная выгрузка из mssql в dbf
    #40017872
Kolu4ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного добавлю, вдруг кому пригодится.
Через Microsoft.Jet.OLEDB командой create table мне не удалось создать таблицу с типом numeric нужной размерности, всегда создавалось 20,5. Здесь на форуме уже кто-то описывал подобный глюк. По этому использовала библиотеку DotNetDBF, с ней все получилось как хотелось.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Универсальная выгрузка из mssql в dbf
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]