简体   繁体   English

如何将Postgres数据库与C#Visual Studio连接

[英]How to connect postgres database with c# visual studio

So, in university lecturers gave us a task to connect a postgresSql database with c# program. 因此,在大学里,讲师给了我们一个任务,将postgresSql数据库与c#程序连接起来。 So far ir have thing looking like this. 到目前为止,我有这样的事情。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.OleDb;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Data.Common;
using Npgsql;
using NpgsqlTypes;

namespace ConsoleApplication4
{
class Program
{
    static void Main(string[] args)
    {
        string postgresConStr = "Server=localhost;Port=5432;UserId=ricards;Password=muzika23;Database=prog4;";
        NpgsqlConnection ncon = new NpgsqlConnection(postgresConStr);
        NpgsqlCommand cmd = new NpgsqlCommand("SELECT * FROM persona", ncon);
        ncon.Open();
        NpgsqlDataReader dr = cmd.ExecuteReader();

        DataTable dt = new DataTable();
        dt.Columns.Add(new DataColumn("ID", typeof(int)));
        dt.Columns.Add(new DataColumn("vards", typeof(string)));
        dt.Columns.Add(new DataColumn("uzvards", typeof(string)));
        dt.Columns.Add(new DataColumn("vecums", typeof(int)));

        while (dr.Read())
        {
            DataRow row = dt.NewRow();
            row["ID"] = dr["ID"];
            row["vards"] = dr["vards"];
            row["uzvards"] = dr["uzvards"];
            row["vecums"] = dr["vecums"];
            dt.Rows.Add(row);
        }
        ncon.Close();
        dt.AcceptChanges();
        int izvele;
        do
        {
            Console.WriteLine("0 - Beigt darbu");
            Console.WriteLine("1 - Apskatīt tabulas datus");
            Console.WriteLine("2 - Pievienot tabulai datus");
            Console.WriteLine("3 - Labot tabulas datus");
            Console.WriteLine("4 - Dzēst tabuas datus");
            Console.Write("Jūsu izvēle: ");
            izvele = int.Parse(Console.ReadLine());
            switch (izvele)
            {
                case 1:
                    PrintTable(dt);
                    break;
                case 2:

                    DataRow drw = dt.NewRow();
                    Console.Write("Ievadiet studenta vārdu: ");
                    string vards = Console.ReadLine();
                    drw["vards"] = vards;

                    Console.Write("Ievadiet uzvārdu: ");
                    string uzvards = Console.ReadLine();
                    drw["uzvards"] = uzvards;

                    Console.Write("Ievadiet vecumu: ");
                    int vecums = int.Parse(Console.ReadLine());
                    drw["vecums"] = vecums;

                    dt.Rows.Add(drw);
                    ApplyToDb(dt, ncon);

                    break;

                default:
                    break;
            }
        } while (izvele !=0);



    }
    static void PrintTable(DataTable dt)
    {
        foreach (DataColumn dc in dt.Columns)
        {
            Console.Write(dc.ColumnName + "   ");
        }
        Console.WriteLine();
        Console.WriteLine();
        foreach (DataRow dr in dt.Rows)
        {
            for (int i = 0; i < dr.ItemArray.Length; i++)
            {

                Console.Write(dr[i] + "\t");


            }
            Console.WriteLine();
            Console.WriteLine();
        }

    }
    static void ApplyToDb(DataTable dt, NpgsqlConnection ncon)
    {

        NpgsqlCommand update = new NpgsqlCommand("UPDATE persona SET vards=?,uzvards=?, vecums=? WHERE ID =? ", ncon);

        update.Parameters.Add(new NpgsqlParameter("@vardss", OleDbType.VarChar));
        update.Parameters.Add(new NpgsqlParameter("@uzvards", OleDbType.VarChar));
        update.Parameters.Add(new NpgsqlParameter("@vecums", OleDbType.VarChar));
        update.Parameters.Add(new NpgsqlParameter("@ID", OleDbType.Integer));




        NpgsqlCommand add = new NpgsqlCommand("INSERT INTO persona (vards, uzvards, vecums) VALUES(@vards, @uzvards, @vecums)", ncon);
        add.Parameters.Add(new NpgsqlParameter("@vards", OleDbType.VarChar));
        add.Parameters.Add(new NpgsqlParameter("@uzvards", OleDbType.VarChar));
        add.Parameters.Add(new NpgsqlParameter("@vecums", OleDbType.VarChar));


        foreach (DataRow dro in dt.GetChanges().Rows)
        {

            if (dro.RowState == DataRowState.Added)
            {
                add.Parameters[0].Value = dro[1];
                add.Parameters[1].Value = dro[2];
                add.Parameters[2].Value = dro[3];
                ncon.Open();
                add.ExecuteNonQuery();
                ncon.Close();
            }
            if (dro.RowState == DataRowState.Modified)
            {
                update.Parameters[0].Value = dro[1];
                update.Parameters[1].Value = dro[2];
                update.Parameters[2].Value = dro[3];
                update.Parameters[3].Value = dro[0];
                ncon.Open();
                update.ExecuteNonQuery();
                ncon.Close();
            }

        }
    }
}

Im sure that code is not the problem, i have checked connectionStrings paths and they all match to postgres (host,database,user and so on). 我确定代码不是问题,我已经检查了connectionStrings路径,它们都与postgres(主机,数据库,用户等)匹配。 The thing i want to know is, do i have to put that postgres database in c# programs debug folder or what? 我想知道的是,我是否必须将该postgres数据库放入c#程序的debug文件夹中? Professor did not mention a thing about it? 教授没提一件事吗? And, how do i even find that database, i have searched whole Postgres folder, but cant seem to find where them databases are hidden. 而且,我什至找不到该数据库,我已经搜索了整个Postgres文件夹,但似乎找不到隐藏它们的数据库。

Please help me out. 请帮帮我。

Thanks 谢谢

EDIT 编辑

 update.Parameters.Add(new NpgsqlParameter("@vardss", OleDbType.VarChar));

Do i need to change the OleDbType to postgres type? 我需要将OleDbType更改为postgres类型吗? How to do it? 怎么做? (This part - OleDbType.VarChar) (这部分-OleDbType.VarChar)

There is not postgres compact edition. 没有postgres精简版。

You need a postgres server, you can download it from postgres site , or if you have some hyper-v, vmware, virtualbox app, you can download one virtual appliance from turnkey . 您需要一个postgres服务器,可以从postgres网站下载它,或者如果您有一些hyper-v,vmware,virtualbox应用程序,则可以从Turnkey下载一个虚拟设备。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM