Insertion simple à l'aide de paramètres
Votre projet devra référencer l'assembly suivant :Npgsql
. Si cette référence n'est pas visible dans Visual Studio , puis :
- naviguez jusqu'au dossier d'installation du connecteur
- Exécuter :
GACInstall.exe
- Redémarrer Visual Studio .
Exemple de tableau
CREATE TABLE "OrderHistory"
(
"OrderId" bigint NOT NULL,
"TotalAmount" bigint,
CONSTRAINT "OrderIdPk" PRIMARY KEY ("OrderId")
)
WITH (
OIDS=FALSE
);
ALTER TABLE "OrderHistory"
OWNER TO postgres;
GRANT ALL ON TABLE "OrderHistory" TO postgres;
GRANT ALL ON TABLE "OrderHistory" TO public;
ALTER TABLE "OrderHistory" ALTER COLUMN "OrderId" SET (n_distinct=1);
GRANT SELECT("OrderId"), UPDATE("OrderId"), INSERT("OrderId"), REFERENCES("OrderId") ON "OrderHistory" TO public;
GRANT SELECT("TotalAmount"), UPDATE("TotalAmount"), INSERT("TotalAmount"), REFERENCES("TotalAmount") ON "OrderHistory" TO public;
Exemple de code
Assurez-vous d'utiliser les directives suivantes :
using Npgsql;
using NpgsqlTypes;
Entrez le code source suivant dans votre méthode :
// Make sure that the user has the INSERT privilege for the OrderHistory table.
NpgsqlConnection connection = new NpgsqlConnection("PORT=5432;TIMEOUT=15;POOLING=True;MINPOOLSIZE=1;MAXPOOLSIZE=20;COMMANDTIMEOUT=20;COMPATIBLE=2.2.4.3;DATABASE=test;HOST=127.0.0.1;PASSWORD=test;USER ID=test");
connection.Open();
DataSet dataSet = new DataSet();
NpgsqlDataAdapter dataAdapter = new NpgsqlDataAdapter("select * from OrderHistory where OrderId=-1", connection);
dataAdapter.InsertCommand = new NpgsqlCommand("insert into OrderHistory(OrderId, TotalAmount) " +
" values (:a, :b)", connection);
dataAdapter.InsertCommand.Parameters.Add(new NpgsqlParameter("a", NpgsqlDbType.Bigint));
dataAdapter.InsertCommand.Parameters.Add(new NpgsqlParameter("b", NpgsqlDbType.Bigint));
dataAdapter.InsertCommand.Parameters[0].Direction = ParameterDirection.Input;
dataAdapter.InsertCommand.Parameters[1].Direction = ParameterDirection.Input;
dataAdapter.InsertCommand.Parameters[0].SourceColumn = "OrderId";
dataAdapter.InsertCommand.Parameters[1].SourceColumn = "TotalAmount";
dataAdapter.Fill(dataSet);
DataTable newOrders = dataSet.Tables[0];
DataRow newOrder = newOrders.NewRow();
newOrder["OrderId"] = 20;
newOrder["TotalAmount"] = 20.0;
newOrders.Rows.Add(newOrder);
DataSet ds2 = dataSet.GetChanges();
dataAdapter.Update(ds2);
dataSet.Merge(ds2);
dataSet.AcceptChanges();
connection.Close();
Réflexions sur les performances
L'affichage original ne faisait aucune mention d'exigences de rendement. Il a été demandé que la solution doit :
- insérer à l'aide d'un
DataTable
- insérer des données sans utiliser de boucle
Si vous insérez des quantités importantes de données, je vous suggère de jeter un œil à vos options de performances. Le Postgres la documentation suggère que vous :
- Désactiver la validation automatique
- Utilisez le
COPY
commande - Supprimer les index
- Supprimer les contraintes de clé étrangère
- etc.
Pour plus d'informations sur l'optimisation des insertions Postgres, veuillez consulter :
- PostgresSql. org :Insertion de données
- PostgresSql.org :Insertion + Conseils de performances
- StackOverflow :comment accélérer les performances d'insertion dans PostgreSQL
En outre, de nombreux autres facteurs peuvent avoir une incidence sur les performances d'un système. Pour une introduction de haut niveau, jetez un œil à :
Autres options
- Le connecteur .NET prend-il en charge Postgres
Copy
commande ?- Si ce n'est pas le cas, vous pouvez télécharger le code source
pour le
Npgsql
connecteur et ajoutez votre propreBulkCopy()
méthode. Assurez-vous d'abord de lire le contrat de licence du code source.
- Si ce n'est pas le cas, vous pouvez télécharger le code source
pour le
- Vérifiez si Postgres prend en charge les paramètres de valeur de table .
- Cette approche vous permet de passer une table dans un
Postgres
fonction qui peut ensuite insérer les données directement dans la destination.
- Cette approche vous permet de passer une table dans un
- Acheter un Postgres Connecteur .NET d'un fournisseur qui inclut la fonctionnalité requise.
Références supplémentaires
- Connecteur .NET Postgres - gratuit &open source