PostgreSQL Parametrisierte Insert mit ADO.NET

Ich bin mit NpgSQL mit PostgreSQL und ADO.NET. Verzeihen Sie die Einfachheit der Frage, als ich gerade angefangen mit PostgreSQL und NpgSQL in dieser Woche.

So etwas gut funktioniert:

[Test]
public void InsertNoParameters()
{
    NpgsqlConnection conn = new NpgsqlConnection("Host=localhost; Database=postgres; User ID=postgres; Password=password");
    conn.Open();

    IDbCommand command = conn.CreateCommand();
    string sql = "INSERT INTO Customers (FirstName,LastName) VALUES ('Test','Tube')";
    command.CommandText = sql;
    command.ExecuteNonQuery();
    conn.Close();
}

Wenn ich in Parameter bekomme ich die Fehlermeldung:
Npgsql.NpgsqlException : FEHLER: 42703: Spalte "_firstname" existiert nicht

[Test]
public void InsertWithParameters()
{
NpgsqlConnection conn = new NpgsqlConnection("Host=localhost; Database=postgres; User ID=postgres; Password=password");
conn.Open();

IDbCommand command = conn.CreateCommand();
string sql = "INSERT INTO Customers (FirstName,LastName) VALUES (_FirstName,_LastName)";
command.CommandText = sql;

var parameter = command.CreateParameter();
parameter.ParameterName = "_FirstName";
parameter.Value = "Test";
command.Parameters.Add(parameter);

parameter = command.CreateParameter();
parameter.ParameterName = "_LastName";
parameter.Value = "Tube";
command.Parameters.Add(parameter);

command.ExecuteNonQuery();
conn.Close();
}
  • Groß - <> Kleinschreibung. Verwenden Sie entweder nur Kleinbuchstaben oder Angabe Ihrer Bezeichner (mit Anführungszeichen).
  • Ich habe gerade versucht alles in Kleinbuchstaben die Namen der parameter und ich bin noch immer der gleiche Fehler.
  • in psql (oder pgadmin) prüfen, was die tatsächlichen Namen der Spalten sind.
  • Soweit ich weiß, die meisten Fahrer, einschließlich der postgresql-Treiber befolgen Sie die microsoft-übereinkommens, um Parameter zu identifizieren, die mit einem @ Präfix, nicht mit einem Unterstrich (_)
  • Es sieht aus wie ein @ - Zeichen. Es ist seltsam, denn die @ ist ungültig für die Funktion Parameter.
  • Das ist irrelevant, es wird im Treiber nicht auf dem server.

InformationsquelleAutor Greg Finzer | 2015-08-22
Schreibe einen Kommentar