[英]Generate .NET DataSet file from a query?
我將Postgres數據庫用於多個Web應用程序的后端。 這些應用程序托管在我訪問受限的第三方服務器上。 我目前使用npgsql和nhibernate滿足所有數據連接需求,並且效果很好。
好吧,現在我需要編寫一些Crystal Reports。 出於性能的考慮(並且由於結果數據無法放入任何實體中),我不能將nhibernate實體用作報表的數據源; 同樣,我無法為Crystal Reports創建ODBC連接,因為目標服務器上沒有驅動程序或DSN。 因此,我想,也許我可以根據編寫的查詢來構建數據集,並使用Npgsql數據提供程序填充它們,並將其提供給Crystal Reports。 我已經進行了概念驗證,並且效果很好。
問題是,我有很多報告和大量數據集要構建,而在每個模型中手動構建模式都非常耗時。 數據集自動化接口不允許我在連接選擇器中選擇我的npgsql數據提供程序,這很煩人。
我希望有一種相當簡單的方法,可以在運行時通過npgsql數據提供程序將一些代碼組合在一起以獲取數據集架構,然后將該架構序列化為文件,然后在設計時將其導入到我的報表項目中。
實際上可以做到嗎? 有更容易的方法嗎? 有大量的報告和許多列,為它們手動編碼模式將非常耗時。
這就是我最終要做的。
我制作了一個快速的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。 這樣我就可以建立我的結果集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.