我有一个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();
Run Code Online (Sandbox Code Playgroud)
我得到这个例外:
Npgsql.NpgsqlException: ERROR: 42703: column "%((E'My place'))%" does not exist
Run Code Online (Sandbox Code Playgroud)
我已经尝试不使用%运行查询,但它不起作用.我也试过使用下面给出的+和&,但是这也不起作用:
string query = "Select \"LocationName\" from \"Locations\" where \"LocationName\" LIKE '%'+ :loc_name +'%'";
Run Code Online (Sandbox Code Playgroud)
使用上面的行,我得到这个例外:
Npgsql.NpgsqlException: ERROR: 42725: operator is not unique: unknown + unknown
Run Code Online (Sandbox Code Playgroud) 连接到需要SSL的AWS Postgres数据库时,我收到以下错误.我最近从npgsql 2.3.2(有bug)升级到3.0.3,无法连接.任何建议,将不胜感激.
DataSource.Error:TlsClientStream.ClientAlertException:CertificateUnknown:不接受服务器证书.链状态:无法将证书链构建到受信任的根颁发机构..在TlsClientStream.TlsClientStream.ParseCertificateMessage(字节[] buf中,的Int32&POS)在TlsClientStream.TlsClientStream.TraverseHandshakeMessages()在TlsClientStream.TlsClientStream.GetInitialHandshakeMessages(布尔allowApplicationData)在TlsClientStream.TlsClientStream.PerformInitialHandshake(字符串主机名,X509CertificateCollection clientCertificates,RemoteCertificateValidationCallback remoteCertificateValidationCallback,布尔checkCertificateRevocation)详细信息:DataSourceKind = PostgreSQL
尝试从C#实用程序打开Postgresql数据库时出现以下错误:
System.IO.IOException:无法从传输连接读取数据:远程主机强制关闭现有连接.---> System.Net.Sockets.SocketException:远程主机强行关闭现有连接
我试过从远程计算机和运行Postgresql服务器的计算机上运行该程序.
目前这两台计算机上都没有防火墙,我可以使用相同的密码通过postgres管理实用程序连接数据库和服务器.我检查过用户名对数据库有权限.
这是我的连接代码:
public bool updateFromServer()
{
try
{
NpgsqlConnection conn = new NpgsqlConnection(connString);
conn.Open();
conn.Close();
return true;
}
catch (Exception e)
{
conn.close()
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助都将不胜感激.
我正在尝试FSharp数据提供程序,但使用npgsql对Postgresql.我在第一线被击败了.
当我尝试创建SqlDataConnection时,它会抛出错误,并显示连接字符串不正确的消息.
类型提供程序'Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders'报告错误:不支持关键字:'port:5432; database'.
现在,我使用Servicestack.Ormlite测试连接字符串和数据.这基本上使用IdbConnection.所以,连接都是正确的.但我不知道为什么Type Provider不工作.
这是代码.
//type dbSchema = SqlDataConnection<ConnectionString = "Server=localhost;Port=5432; Database=TestDB;User Id=postgres;Password=g00gle*92;" >
[<CLIMutable>]
type Person =
{ ID : int;
FirstName : string;
LastName : string }
[<EntryPoint>]
let main args =
let dbFactory =
OrmLiteConnectionFactory
(
"Server=localhost;Port=5432; Database=TestDB;User Id=postgres;Password=*****;",
PostgreSqlDialect.Provider)
use dbConnection = dbFactory.OpenDbConnection()
Console.WriteLine dbConnection.State
let persons = dbConnection.Select<Person>()
persons.ForEach(fun p -> Console.WriteLine p.FirstName)
Console.Read() |> ignore
0
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,第一个注释行无效,而下面的代码设置相同.这意味着问题只与类型提供者没有连接IMHO.
我是否需要进行任何其他设置.
如果需要任何其他细节,请告诉我.
UPDATE
在kvb的评论之后,我试过了两个.这是使用web配置更新的代码.
//type dbSchema = SqlEntityConnection<ConnectionStringName = "TestDB", Provider="Npgsql">
type dbSchema = SqlEntityConnection< …Run Code Online (Sandbox Code Playgroud) 我有这个简单的C#程序:
using Npgsql;
public class App {
public static void Main(string[] args) {
const string CONNECTION_STRING = "Host=myserver;Username=mylogin;Password=mypass;Database=mydatabase";
using (var conn = new NpgsqlConnection(CONNECTION_STRING)) {
conn.Open();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我用mono(mcs)编译它:
mcs -target:exe -lib:bin -r:System.Data.dll -r:Npgsql.dll -r:System.dll -r:Mono.Security.dll -out:bin/ssl.exe src/App.cs
Run Code Online (Sandbox Code Playgroud)
当我执行时,抛出一个错误:
Unhandled Exception:
System.TypeLoadException: Could not load type 'System.Net.Security.SslStream' from assembly 'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
at Npgsql.NpgsqlConnector.Open () <0x4155f7f0 + 0x00115> in <filename unknown>:0
at Npgsql.NpgsqlConnectorPool.GetPooledConnector (Npgsql.NpgsqlConnection Connection) <0x4155c8d0 + 0x00a4f> in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: Could not …Run Code Online (Sandbox Code Playgroud) 我想在Postgres使用Npgsql时更好地理解连接池.(http://www.npgsql.org/)
当我使用连接字符串时:
UserID = root; Password = myPassword; Host = localhost; Port = 5432; Database = myDataBase; Pooling = true; Min Pool Size = 0; Max Pool Size = 100;
"Pooling"将在哪里举行?在我的应用程序服务器上或数据库上?
当我调用connection.Open()时,会发生什么?如果存在连接,则从池中获取连接,如果不存在,则创建池?
关于连接池的任何其他一般信息将不胜感激.
谢谢.
我正在尝试使用 Dapper.Net 将 JSON 数据插入到 JSONB PostgreSQL 列中。
该用于JSONB文件Npgsql的给人使用的具体指示NpgsqlDbType.Jsonb的数据类型。
使用 Dapper,我试图将其添加为自定义参数,但没有成功。
using (var conn = myconnection)
{
var sql = "INSERT INTO mytable (jsonbody) VALUES (@jb);";
dp = new DynamicParameters();
dp.Add("jb", stringOfJsonData, (DbType)NpgsqlDbType.Jsonb);
await conn.ExecuteAsync(sql,dp);
}
Run Code Online (Sandbox Code Playgroud)
我收到的错误是
System.NotSupportedException : The parameter type DbType.36 isn't supported by PostgreSQL or Npgsql
关于如何将这两个库一起用于 JSONB 的任何建议?
谢谢。
笔记:
它有两列:
Car 类如下所示:
public class Car
{
public string LicenseNumber {get;set;}
public List<Kitchen> KitchenIntegrations {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
Kitchen.cs 看起来像这样:
public class Kitchen
{
public int Id {get;set;}
public string KitchenName {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
最后我的 CarContext.cs 如下所示:
public class CarContext : DbContext
{
public DbSet<Car> Cars { get; set; }
public CarContext()
{
}
public CarContext(DbContextOptions<CarContext> options) : base(options)
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) …Run Code Online (Sandbox Code Playgroud) 我有一个 .Net Core (C#) 应用程序,它通过 websocket 接受用户请求,然后创建与 PostgreSQL 数据库的连接以操作/处理数据。
当用户向后端发出新请求时,调用的端点函数会创建一个新的 SQL 连接并运行查询:
// Endpoint available via Websocket
public async Task someRequest(someClass someArg)
{
/* Create a new SQL connection for this user's request */
using var conn = new NpgsqlConnection(connstr.getConnStr());
conn.Open();
/* Call functions and pass this SQL connection for any queries to process this user request */
somefunction(conn, someArg);
anotherFunction(conn, someArg);
/* Request processing is done */
/* conn is closed automatically by the "using" statement above */
} …Run Code Online (Sandbox Code Playgroud) 我有一个过滤器对象来查询具有许多列的表,而不是写一个覆盖所有列的条件(允许可选的过滤),如下所示:
WHERE ((:value0 IS NULL) OR (column_name0 = :value0)) AND ((:value1 IS NULL) OR (column_name1 = :value1)) AND... etc
Run Code Online (Sandbox Code Playgroud)
对于每一列.相反,我理想情况下我希望能够将字段名称作为参数传递:
WHERE :column_name0 = :value0 AND column_name1 = :value1 AND... etc
Run Code Online (Sandbox Code Playgroud)
这是不可能的,因为在解析时需要列(类似于此处给出的答案).
你怎么克服这个? - 我真的不想在添加或删除新列时维护SQL(正如我在第一个例子中所做的那样),我认为将列名直接构造到命令字符串中会很危险因为这可能允许sql注入.
请注意,此代码位于Web服务之后.