C# 是否从查询生成.NET数据集文件?
我使用Postgres数据库作为我的后端,用于多个web应用程序。这些应用程序托管在我访问权限有限的第三方服务器上。我目前使用npgsql和nhibernate来满足我所有的数据连接需求,这非常有效 嗯,现在我需要写一些水晶报告。出于性能考虑(并且由于结果数据不适合任何实体),我不能将我的nhibernate实体用作报告的数据源;同样,我无法为Crystal Reports创建ODBC连接,因为目标服务器上没有驱动程序或DSN。因此,我想,也许我可以基于我编写的查询构建数据集,并使用Npgsql数据提供程序填充它们,然后将它们提供给Crystal报表。我已经进行了概念验证,效果很好 问题是,我有很多报告和很多数据集要构建,在每个报告和数据集中手动构建模式非常耗时。dataset自动化接口不允许我在连接选择器中选择我的npgsql数据提供程序,这相当烦人 我希望有一种相当简单的方法,可以在运行时通过npgsql数据提供程序收集一个数据集模式,然后将模式序列化为文件,然后在设计时导入到我的报告项目中 这实际上可以做到吗?有没有更简单的方法?有一堆报告和许多列,为它们手工编写模式将非常耗时 数据集自动化接口不允许我选择npgsql数据提供程序 任何.NET数据提供程序都必须在中注册才能在Visual Studio Designer中得到支持(不过,使用特定的提供程序生成和运行应用程序时,这不是必需的) 关于C# 是否从查询生成.NET数据集文件?,c#,postgresql,crystal-reports,strongly-typed-dataset,npgsql,C#,Postgresql,Crystal Reports,Strongly Typed Dataset,Npgsql,我使用Postgres数据库作为我的后端,用于多个web应用程序。这些应用程序托管在我访问权限有限的第三方服务器上。我目前使用npgsql和nhibernate来满足我所有的数据连接需求,这非常有效 嗯,现在我需要写一些水晶报告。出于性能考虑(并且由于结果数据不适合任何实体),我不能将我的nhibernate实体用作报告的数据源;同样,我无法为Crystal Reports创建ODBC连接,因为目标服务器上没有驱动程序或DSN。因此,我想,也许我可以基于我编写的查询构建数据集,并使用Npgsql
npgsql
,也有类似的问题,但它已经有将近2年的历史了。也许,自2011年以来发生了一些变化,因为官方文件: 2.2安装二进制软件包 …
请注意,在GAC中放置Npgsql是Npgsql设计所必需的 Visual Studio.Net中的时间支持
这就是我最后做的 我制作了一个快速的小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。有了这个,我就能够构建我的结果集。如果我将Npgsql放在开发机器上的GAC中,用于设计时的东西,您认为在运行时的生产环境中使用它会有任何后果,因为库就在本地bin目录中?您的机器上的GAC和DDEX设置似乎不会影响生产环境。