Tag: npgsql

喜欢使用参数的npgsql语句

我有一个postgresql数据库,我想查询表“位置”,以检索与用户输入的名称匹配的所有位置的名称。 列名是“LocationName”。 我正在使用带有C#的ASP.net。 NpgsqlConnection con = new NpgsqlConnection(ConfigurationManager.ConnectionStrings[“ConnString”].ToString()); NpgsqlCommand cmd = new NpgsqlCommand(“Select * from \”Locations\” where \”LocationName\” LIKE \”%@loc_name%\””, con); cmd.Parameters.AddWithValue(“@loc_name”, Location_Name); NpgsqlDataReader reader = cmd.ExecuteReader(); 我得到这个例外: Npgsql.NpgsqlException: ERROR: 42703: column "%((E’My place’))%" does not exist 我尝试不使用%运行查询,但它不起作用。 我也试过使用下面给出的+和&like,但这也不起作用: string query = “Select \”LocationName\” from \”Locations\” where \”LocationName\” LIKE ‘%’+ :loc_name +’%'”; 使用上面的行,我得到这个例外: Npgsql.NpgsqlException: ERROR: […]

EntityFramework DbContext生命周期+ Postgres:“一项操作已在进行中。”

我几天来一直在弄乱以下几天。 我有一个在Mono上运行的Nancy应用程序,带有Repository模式和UnitOfWork的EntityFramework,以及Postgres。 Nancy使用TinyIoC作为IoC容器。 我有一个Web应用程序,它在前端对请求进行排队,因此后端每次都会遇到一个请求。 一切正常。 但是,当我运行连接到同一后端的iOS应用程序并且没有将请求排队到后端时,麻烦就开始了,有时几乎同时触发请求。 随机间隔后端开始抛出此错误: 2016-09-20T13:30:16.120057436Z app[web.1]: System.Data.Entity.Core.EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details. —> System.InvalidOperationException: An operation is already in progress. 2016-09-20T13:30:16.120104535Z app[web.1]: at Npgsql.NpgsqlConnector.StartUserAction (ConnectorState newState) in :0 2016-09-20T13:30:16.120113254Z app[web.1]: at Npgsql.NpgsqlCommand.ExecuteDbDataReaderInternal (CommandBehavior behavior) in :0 2016-09-20T13:30:16.120119308Z app[web.1]: at Npgsql.NpgsqlCommand.ExecuteDbDataReader (CommandBehavior behavior) in […]

如何从Npgsql和存储过程返回自定义表类型?

我正在尝试基于隐式表类型返回自定义(复合)类型。 我有这个表定义: CREATE TABLE app_user (id CHAR(36) PRIMARY KEY, name TEXT); 哪个映射到此类定义: public class ApplicationUser { public string Id { get; set; } public string Name { get; set; } } 通过调用映射: NpgsqlConnection.MapCompositeGlobally(“app_user”); 我正在尝试使用此存储过程返回记录: CREATE FUNCTION find_by_id(user_id app_user.id%TYPE) RETURNS app_user AS $$ DECLARE found_user app_user; BEGIN SELECT * FROM app_user WHERE id = user_id INTO […]

我可以使用Parallel.For和sql命令吗?

我有一类范围 public class avl_range { public long start { get; set; } public long end { get; set; } } 如果我使用正常的FOR工作完美,但必须等待每个命令完成,每个查询需要8秒,所以10个查询需要80秒。 在Parallel版本中如果我只打印范围工作完美,但如果尝试执行命令说已经在进行中。 {“一项操作已在进行中。”} 我怎么解决这个问题? var numbers = new List(); using (var conn = new NpgsqlConnection(strConnection)) { conn.Open(); Action forEachLoop = number => //Begin definition of forLoop { // only the console write line works ok […]

Postgres bytea列返回字符串(char数组)而不是字节数组

我一直在使用C#为不同数据库的产品编写具体的提供程序实现。 W / out进入细节,其中一列是字节数组类型(postgres中的bytea – 由于首选项bytea是在blob上选择的)。 唯一的问题是,它不会返回插入的相同值。 当我插入Int32(“0”)时,我得到8 [92和8x 48](而不是[0,0,0,0])。 我需要一个性能明智的解决方案,它将返回我插入的纯字节,而不是8个字节上的值“0”的ASCII表示。 我正在使用Npgsql来检索数据。 如果有人知道c#的解决方案,我也很乐意学习它。 编辑: Postgres 9.0,.Net 3.5 简单化 命令查询: – 里面只有一个插入语句 select InsertOrUpdateEntry(:nodeId, :timeStamp, :data) 数据参数: byte [] value = BitConverter.GetBytes((int)someValue); 参数分配如下 command.Parameters.Add(new NpgsqlParameter(“data”, NpgsqlDbType.Bytea) { Value = value }); 选择陈述: select * from Entries 我输入了相同的字节数组,我想回去。 我将衷心感谢您的帮助。 输入:0 0 0 0 电流输出:92 48 48 48 […]

无法在Npgsql中立即收到多个通知

今天我编写了以下代码,该代码适用于名为Npgsql的PostgreSQL C#库: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Npgsql; namespace PostgreSQLNotificationsTest { class Program { static void Main(string[] args) { using (var conn = new NpgsqlConnection(“Server=127.0.0.1;Port=5432;User Id=postgres;Password=my_password;Database=helper_db.psql;SyncNotification=true”)) { conn.Notification += OnNotification; conn.Open(); using (var command = new NpgsqlCommand(“listen notifytest;”, conn)) { command.ExecuteNonQuery(); } Console.ReadLine(); }; } private static void OnNotification(object […]

无法首先使用Npgsql和Entity Framework代码在PostreSQL中创建数据库

我正在尝试设置我的应用程序以使用Entity Framework和PostgreSQL,但我遇到了一个问题。 我已经通过nuget添加了Npqsql,并将以下提供程序工厂添加到web.config : 使用连接字符串: 它似乎很好地连接到数据库,但当我尝试在数据库上执行任何类型的操作时,我得到以下exception: FATAL: 3D000: database “withoomph” does not exist 当db设置如下时,我正在正确设置数据库intitializer: static MyDB() { Database.SetInitializer(new CreateDatabaseIfNotExists()); } 所以当我尝试用我的DbContext做任何事情时,它应该只是简单地创建db? 我不明白,整个早上都拔我的头发!

如何在npgsql中调用存储过程来获取游标数据

我查看过www.npgsql.org上的资料 ,但找不到如何解决我的问题…… 表,PostgreSQL [City], [State] “Austin”, “TX” “Houston”, “TX” “Los Angeles”, “CA” “San Diego”, “CA” “San Fransisco”;”CA” “St.Louis”, “MO” 函数(存储过程),PostgreSQL — Procedure that returns a single result set (cursor) CREATE OR REPLACE FUNCTION show_cities() RETURNS refcursor AS $$ DECLARE ref refcursor; BEGIN OPEN ref FOR SELECT city, state FROM cities; RETURN ref; END; $$ LANGUAGE […]

使用ExecuteScalar插入时,使用Npgsql检索序列ID

我正在尝试使用串行主键在PostgreSQL表中插入一行,我需要在插入后检索此列。 我有这样的事情: 表“pais”有3列:id,pais,capital; id是一个串行列,是它的主键。 NpgsqlCommand query = new NpgsqlCommand(“insert into pais(nombre, capital) values(@nombre, @capital)”, conn); query.Parameters.Add(new NpgsqlParameter(“nombre”, NpgsqlDbType.Varchar)); query.Parameters.Add(new NpgsqlParameter(“capital”, NpgsqlDbType.Varchar)); query.Prepare(); query.Parameters[0].Value = this.textBox1.Text; query.Parameters[1].Value = this.textBox2.Text; Object res = query.ExecuteScalar(); Console.WriteLine(res); 它在表上插入行,但“res”值为null。 如果我使用nexval(’table_sequence’)插入也返回null。 知道如何返回表的id? 我错过了什么吗? 提前致谢

一起使用npgsql 12和ef 6 – 有没有人成功了?

我正在尝试为我的老板创建一个关于npgsql 12和ef6混合的小POC,在visual studio上创建了一个新项目,创建了一个示例数据库,创建了相应的类和dbcontext,每当我尝试使用ef访问数据库我收到以下错误: entity framework提供程序类型’Npgsql.NpgsqlFactory,Npgsql,Version = 2.0.12.0,Culture = neutral,PublicKeyToken = 5d8b90d52f46fda7’的’Instance’成员未返回inheritance自’System.Data.Entity.Core.Common的对象.DbProviderServices’。 entity framework提供程序必须从此类inheritance,并且“实例”成员必须返回提供程序的单例实例。 这可能是因为提供者不支持entity framework6或更高版本; 有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882 。 我知道现在应该支持它了很长一段时间http://fxjr.blogspot.co.il/2013/06/initial-ef-6-support-added-to-npgsql.html 但我似乎无法让它工作,我的App.Config文件看起来像这样: <!—-> 任何帮助,将不胜感激!