Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否从查询生成.NET数据集文件?_C#_Postgresql_Crystal Reports_Strongly Typed Dataset_Npgsql - Fatal编程技术网

C# 是否从查询生成.NET数据集文件?

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

我使用Postgres数据库作为我的后端,用于多个web应用程序。这些应用程序托管在我访问权限有限的第三方服务器上。我目前使用npgsql和nhibernate来满足我所有的数据连接需求,这非常有效

嗯,现在我需要写一些水晶报告。出于性能考虑(并且由于结果数据不适合任何实体),我不能将我的nhibernate实体用作报告的数据源;同样,我无法为Crystal Reports创建ODBC连接,因为目标服务器上没有驱动程序或DSN。因此,我想,也许我可以基于我编写的查询构建数据集,并使用Npgsql数据提供程序填充它们,然后将它们提供给Crystal报表。我已经进行了概念验证,效果很好

问题是,我有很多报告和很多数据集要构建,在每个报告和数据集中手动构建模式非常耗时。dataset自动化接口不允许我在连接选择器中选择我的npgsql数据提供程序,这相当烦人

我希望有一种相当简单的方法,可以在运行时通过npgsql数据提供程序收集一个数据集模式,然后将模式序列化为文件,然后在设计时导入到我的报告项目中

这实际上可以做到吗?有没有更简单的方法?有一堆报告和许多列,为它们手工编写模式将非常耗时

数据集自动化接口不允许我选择npgsql数据提供程序

任何.NET数据提供程序都必须在中注册才能在Visual Studio Designer中得到支持(不过,使用特定的提供程序生成和运行应用程序时,这不是必需的)

关于
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设置似乎不会影响生产环境。