问题标签 [npgsql]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1486 浏览

c# - NpgSQLdataReader GetOrdinal 抛出异常.. 有什么办法吗?

我为我通常在项目的 DAL 中使用的一堆方法构建了一个围绕 NpgSQL 的包装器。其中两个,我通常用来直接从 DataReader 填充 DTO。通常在填充辅助方法中,我将实例化 DTO 并遍历将 Datareader 的数据映射到相应属性的属性。填充方法大部分时间都会生成。

由于我允许许多属性为空或使用 DTO 的默认值,因此我使用了一种方法来检查 dataReader 的数据是否对属性有效,然后再填写属性。所以我将有一个 IsValidString("fieldname") 和一个 DRGetString("fieldname") 方法,如下所示:

我的填充方法被委托给执行查询的任何方法,如下所示:

这在 NpgSQL pre 2.02 中工作得很好。. 当调用 GetOrdinal 方法时,如果 dataReader 中不存在该字段,我会简单地返回 -1。在 IsValidString() 中很容易返回 false 并直接跳到下一个属性。检查不存在的字段对性能的影响几乎可以忽略不计。

不幸的是,当字段不存在时,对 NpgSQL 的更改会使 GetOrdinal 抛出异常。我有一个简单的解决方法,我将代码包装在 try /catch 中并在 catch 中抛出 false。但是我能感觉到性能受到了打击,尤其是当我进入调试模式时。填写一长串需要几分钟。

据推测,NpgSQL 有一个可以添加到连接字符串(兼容性)的参数以支持此方法的向后兼容性,但我从来没有让它正常工作(由于连接字符串格式错误,我总是遇到异常)。无论如何,我正在寻找更好的解决方法的建议。有什么更好的方法可以从数据读取器中填充对象,甚至可以以某种方式解决异常问题?

0 投票
2 回答
7528 浏览

c# - Npgsql 按名称将参数传递给存储的函数

我正在使用要转换为使用 .NET 的 Pgsql 的代码。我想调用具有多个参数的存储函数,但我想按名称绑定参数,如下所示:

到目前为止,尝试执行此操作以查找参数类型匹配的函数,该函数按照我将参数添加到集合中的顺序,而不是按名称匹配。

Npgsql 是否可以按名称将参数绑定到存储的函数?

0 投票
1 回答
2380 浏览

c# - 使用 Rhino Mocks 对 NpgsqlCommand 进行单元测试

我的单元测试不断收到以下错误:“System.InvalidOperationException:连接未打开。”

考试

被测代码

您将如何使用 Rhino Mocks 3.6 测试代码?

PS。NpgsqlConnection 是一个到 PostgreSQL 服务器的连接。

0 投票
2 回答
4824 浏览

c# - NpgSQL 插入包含反斜杠“\\”的文件路径

我正在尝试创建包含文件路径的记录。使用驱动程序将插入到Postgres启用了 UTF8 的数据库中。NpqSQL

我的表定义:

我的 SQL 语句,包括执行它的代码(归结为最低限度):

使用pgAdmin插入上述语句时,它工作正常。通过Visual Studio C#使用NpgSQL驱动程序,失败并出现以下异常:

正如Milen准确解释的那样,Postgres 将该语句解释为一个octal数字 (\o201 == 0x81)。

正如Milen还描述E的,路径的前面没有帮助。

快速回顾一下:为什么 NpqSQL 会停止我插入\\2010?

0 投票
1 回答
5656 浏览

c# - C# 和 NpgsqlDataAdapter 返回单个字符串而不是数据表

我有一个 postgresql 数据库和一个 C# 应用程序来访问它。我从 NpgsqlDataAdapter.Fill 命令返回到 DataSet 的值出现一个奇怪的错误。

我有这个代码:

所以我的问题是:上面的代码完美地工作,就像我想要的那样。但是,如果我尝试命名单个列以从查询中返回,而不是对所有 (*) 进行选择,我会得到我要求的信息,而不是在数据表中被分成单独的条目,我得到一个字符串在数据表的第一个索引中,看起来像:

"(0,5,false,鲍勃·史密斯,7)"

并且数据是正确的,我期待 0,然后是 5,然后是布尔值,然后是一些文本等。但我(显然)更希望它不作为一个大字符串返回。

任何人都知道为什么如果我对 * 进行选择,我会按预期得到一个数据表,但是如果我对特定列进行选择,我会得到一个数据表,其中一个条目是我要求的值的字符串?

0 投票
1 回答
1922 浏览

postgresql - 我可以在我的 .NET 4.0 项目中使用 Npgsql 数据提供程序吗?

我有一个想用 .NET 4.0 编写的 MVC 项目

如果我将通过 Entity Framework 使用 Npgsql (目前支持 .net 3.5 ),是否可以使用它,并且我会将自己限制在 3.5 中包含的 EF 功能?

0 投票
1 回答
718 浏览

.net - 当我访问 ADODB 字段的值时导致 System.AccessViolationException 的原因是什么?

我正在从 .Net Web 服务(都在 Windows XP 机器上)连接到 PostgreSQL 数据库。最近有几次,在几台不同的计算机上,我们收到了System.AccessViolationException错误。

我能够获得的一个堆栈跟踪表明它是在我获取 ADODB.recordset 并获取字段的值时发生的。例如

这并不总是失败;它很少失败。我们在其中一台计算机上运行 memtest,没有发现任何问题。

问题可能是什么?如果是司机,我有什么选择?

0 投票
1 回答
12512 浏览

c# - npgsql Leaking Postgres DB Connections:监控连接的方法?

背景:我正在将我的应用程序从 npgsql v1 移动到 npgsql v2.0.9。运行我的应用程序几分钟后,我得到一个 System.Exception: Timeout while getting a connection from the pool。

网络声称这是由于连接泄漏(打开数据库连接,但没有正确关闭它们)。

所以

我正在尝试诊断 npgsql 中泄漏的 postgres 连接。

来自各地的各种网络文学;诊断泄漏连接的一种方法是在 npgsql 上设置日志记录,并在日志中查找泄漏连接警告消息。问题是,我在任何地方的日志中都没有看到此消息。

我还发现了监视 npgsql 连接的实用程序,但它不稳定并且崩溃。

所以我只能手动检查代码。对于每个创建 npgsql 连接的地方,都有一个 finally 块处理它。对于每个打开数据读取器的地方,都会使用 CommandBehavior.CloseConnection(并且会释放数据读取器)。

还有其他地方可以检查或有人可以推荐一种方法来查找泄漏的池连接吗?

0 投票
1 回答
2023 浏览

entity-framework - 如何解决 ProviderManifestToken="8.3.7" 和 Npgsql ProviderManifestToken="8.1.3" 冲突?

我正在尝试使用实体框架连接到我的 PostgreSQL 数据库。不幸的是,在我的 SSDL 文件中使用 EdmGen(或 EdmGen2)生成模型后,ProviderManifestToken 设置为 8.3.7,而在当前版本的 Npgsql(2.0.9)中它设置为 8.1.3。在尝试使用我的实体模型时,这给了我一个休闲异常:

System.Data.MetadataException:指定的架构无效。错误:Npgsql.NpgsqlSchema.ssdl(2,52):错误 0169:所有 SSDL 工件必须针对同一个提供程序。ProviderManifestToken '8.1.3' 与之前遇到的 '8.3.7' 不同。

任何想法如何修复它或使用 ProviderManifestToken eq 8.1.3 生成模型?

请不要建议我的预算不允许的商业数据库连接器:P

0 投票
1 回答
477 浏览

.net - NPGSQL 似乎有一个相当大的错误?

这很奇怪,当我运行以下代码时,所有行都从数据库返回。想象一下如果这是更新或删除会发生什么。

我的问题是为什么会这样?