0

Я использую базу данных Postgres для моего бэкэнд для нескольких веб-приложений. Эти приложения размещаются на стороннем сервере, к которому у меня ограниченный доступ. В настоящее время я использую npgsql и nhibernate для всех моих потребностей в подключении к данным, и это работает очень хорошо.Создать файл .NET DataSet из запроса?

Ну, теперь мне нужно написать некоторые Crystal Reports. Для эффективности (и потому, что данные результатов не вписываются ни в какие сущности), я не могу использовать мои объекты nhibernate в качестве источника данных для отчетов; Аналогично, я не могу создать соединение ODBC для Crystal Reports, потому что на целевом сервере нет драйвера или DSN. Поэтому я подумал, может быть, я смогу создавать наборы данных, основанные на запросах, которые я пишу, и заполнять их с помощью поставщика данных Npgsql и передавать их в Crystal Reports. Я выполнил доказательство концепции, и он работает очень хорошо.

Проблема заключается в том, что у меня много отчетов и множество наборов данных для сборки, и очень важно вручную строить схему в каждом из них. Интерфейсы автоматизации набора данных не позволят мне выбрать поставщика данных npgsql в селекторе соединений, что довольно раздражает.

Я надеялся, что может быть довольно простой способ собрать небольшой код, чтобы получить схему набора данных через поставщик данных npgsql во время выполнения, а затем сериализовать схемы в файлы, которые я мог бы затем импортировать в свой проект отчетности в проекте время.

Можно ли это практически сделать? Есть ли более простой способ? Там есть множество отчетов и множество столбцов, а ручной код для них будет чрезвычайно трудоемким.

интерфейсы автоматизации

ответ

0

Вот что я в итоге сделал.

Я сделал небольшое небольшое приложение WinForms, которое содержит три многострочных текстовых поля и кнопку. Событие нажатия кнопки имело следующий код прилагается к нему:

 var query = txtQuery.Text; 
     var connectionString = ConfigurationManager.ConnectionStrings["connection"].ConnectionString; 

     try 
     { 
      string data; 
      string schema; 
      GetSchema(connectionString, query, out data, out schema); 
      txtXML.Text = data; 
      txtXSD.Text = schema; 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 

метод GetSchema выглядел следующим образом:

private void GetSchema(string connectionString, string query, out string data, out string schema) 
    { 
     using (var conn = new Npgsql.NpgsqlConnection(connectionString)) 
     using (var da = new Npgsql.NpgsqlDataAdapter(query, conn)) 
     using (var ds = new DataSet()) 
     using (var dataStream = new MemoryStream()) 
     using (var schemaStream = new MemoryStream()) 
     { 
      conn.Open(); 
      da.Fill(ds); 
      ds.WriteXml(dataStream); 
      ds.WriteXmlSchema(schemaStream); 
      dataStream.Position = 0; 
      schemaStream.Position = 0; 
      using (var dataReader = new StreamReader(dataStream)) 
      using (var schemaReader = new StreamReader(schemaStream)) 
      { 
       data = dataReader.ReadToEnd(); 
       schema = schemaReader.ReadToEnd(); 
      } 
     } 
    } 

Когда я побежал, я получил XML данных и мою схему XML. С этим я смог построить свои результирующие наборы.

1

набора данных не позволит мне выбрать мой npgsql поставщика данных

Любой поставщик данных .NET должен быть зарегистрирован в DDEX будет поддерживаться в дизайнеров Visual Studio (хотя это не является необходимым для использования конкретного поставщика для создания и запуска приложений).

was Аналогичный вопрос о npgsql, но это почти 2 года.
Может быть, что-то изменилось с 2011 года, потому что официальная документация says:

2,2 Установка бинарного пакета

...
Заметьте, что размещение Npgsql в GAC требуется для Npgsql дизайн поддержки времени в Визуальная Студия .Net.

+0

Если я размещаю Npgsql в GAC на моей машине разработки для материалов времени разработки, считаете ли вы, что это будет иметь последствия с его использованием в производственной среде во время выполнения, когда библиотека находится только в локальном каталоге bin? Казалось бы, это сработает. –

+0

Настройки GAC и DDEX на вашем компьютере не влияют на производственную среду. – Dennis

+0

Хм, похоже, что это не работает. Вздох... –

 Смежные вопросы

  • Нет связанных вопросов^_^