C#结合ListView连接PostgreSQL实现增删改查

1、前言

平时使用最多的就的数据库软件就是SQL Server 和MySQL,但是Sql Server用的一直都是破解版,哈哈,自己使用还好,商用的话,总感觉不太合适,所以,自己抽空研究了下PostgreSQL数据库,写了个小demo,可以实现数据库的连接和增删改查。

2、PostgreSQL简介

PostgreSQL是一个功能强大的开源对象关系数据库系统,经过30多年的积极开发,在可靠性,功能稳健性和性能方面赢得了良好的声誉。

有大量信息可以通过官方文档介绍如何安装和使用 PostgreSQL 。PostgreSQL社区提供了许多有用的地方,以熟悉技术,发现它的工作原理,并找到职业机会。在这里联系社区。下面是它官网的截图。

C#结合ListView连接PostgreSQL实现增删改查_第1张图片

嗯,很先进

 

3.代码

放代码之前,先看一下软件截图吧。

C#结合ListView连接PostgreSQL实现增删改查_第2张图片

主界面


嗯,主界面就长这样,输入服务器名,用户名,密码,数据库名,然后点击连接就可以了,连接成功之后,点击查找数据,可以把PostgreSQL里面的数据查询出来放到ListView中,然后可以插入数据,点击插入内容会弹出一个小窗口,就像下面这张图片。

C#结合ListView连接PostgreSQL实现增删改查_第3张图片

添加数据


点击更新,需要先选中下面的一行数据,然后也是弹出一个小窗口,看图。

C#结合ListView连接PostgreSQL实现增删改查_第4张图片

更新数据


嗯,页面就这些,功能比较简单,下面看代码。
首先当然是要连接数据库。顺便说一下,连接PostgreSQL需要先下载一个Nuget包,叫 Npgsql

C#结合ListView连接PostgreSQL实现增删改查_第5张图片

image.png


然后添加引用。

 

using Npgsql;

连接数据库。

   //连接数据库
        public void btn_connect_Click(object sender, EventArgs e)
        {
            string hostname = txt_hostname.Text;
            string username = txt_username.Text;
            string password = txt_password.Text;
            string database = txt_database.Text;

            string connec_info = NPGSQLHelper.NpgsqlConn(hostname, username, password, database);
            switch(connec_info)
            {
                case "connection_success":
                    label_info.Visible = true;
                    label_info.Text = "连接成功";
                    label_info.ForeColor = Color.Green;
                    break;
                case "connection_failed":
                    label_info.Visible = true;
                    label_info.Text = "连接失败";
                    label_info.ForeColor = Color.Red;
                    break;
                default:
                    label_info.Visible = true;
                    label_info.Text = "连接失败";
                    label_info.ForeColor = Color.Red;
                    break;
            }
           
        }

查找数据

 //查询
        private void btn_select_Click(object sender, EventArgs e)
        {
            string select_sql = "select id,name,telephone,email from users";
            DataTable dt = NPGSQLHelper.GetData(select_sql).Tables[0];
            list_user.Items.Clear();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                ListViewItem[] p = new ListViewItem[1];
                p[0] = new ListViewItem(new string[] { dt.Rows[i]["id"].ToString(), dt.Rows[i]["name"].ToString(), dt.Rows[i]["telephone"].ToString(), dt.Rows[i]["email"].ToString() });

                this.list_user.Items.AddRange(p);
            }
        }

嗯,可以看到查找的关键代码在一个名为NPGSQLHelper的类中。这个代码在最下面会附上。
然后是插入数据。

   //插入数据 需要弹出窗口
        private void btn_insert_Click(object sender, EventArgs e)
        {
            //弹出插入信息窗口
            Insert_form inf = new Insert_form();
            inf.ShowDialog();
          
        }
    public void btn_add_Click(object sender, EventArgs e)
        {
            string name = txt_name.Text;
            string telephone = txt_telephone.Text;
            string email = txt_email.Text;
            int c = NPGSQLHelper.Add(name, telephone, email);
            if (c > 0)
            {
                MessageBox.Show("数据插入成功");
            }
            else
            {
                MessageBox.Show("数据插入失败");
            }
        }

这里解释一下,为什么会是两个方法,在主页点击插入数据,会弹出一个窗口,在弹出的窗口中输入内容然后点击插入数据的。然后是更新数据。

  //更新 需弹出窗口
        private void btn_update_Click(object sender, EventArgs e)
        {
            int select_count = list_user.CheckedItems.Count;
            if(select_count!=1)
            {
                MessageBox.Show("请选择一条数据");
            }
            else
            {
                string id = list_user.CheckedItems[0].SubItems[0].Text;
                string name = list_user.CheckedItems[0].SubItems[1].Text;
                string telephone = list_user.CheckedItems[0].SubItems[2].Text;
                string email = list_user.CheckedItems[0].SubItems[3].Text;
                update_form uf = new update_form(id,name, telephone, email);
                uf.ShowDialog();
            }
        }
  private void btn_add_Click(object sender, EventArgs e)
        {
            string name = txt_name.Text;
            string telephone = txt_telephone.Text;
            string email = txt_email.Text;
            int c = NPGSQLHelper.Update(_id, name, telephone, email);
            if (c > 0)
            {
                MessageBox.Show("数据更改成功");
            }
            else
            {
                MessageBox.Show("数据更改失败");
            }
        }

更新数据也是需要在弹出的窗口中进行操作。最后是删除数据。

 //删除
        private void btn_delete_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("确定删除?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                int id = Convert.ToInt32(list_user.CheckedItems[0].SubItems[0].Text);
                int c = NPGSQLHelper.delete(id);
                if (c > 0)
                {
                    MessageBox.Show("共删除" + c + "条数据");
                }
                else
                {
                    MessageBox.Show("数据删除失败");
                }
            }
        }

删除数据首先要给用户一个提示,用户点击确定然后才会真的删除数据。
最后附上关键的NPGSQLHelper类。

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Npgsql;

namespace PostgreSQL_demo
{
    public class NPGSQLHelper
    {
        //配置数据库连接
        public static  NpgsqlConnection npsqlconn;
        public static string  NpgsqlConn(string hostname,string username,string password,string database)
        {
            string connecstr = string.Format("PORT=5432;DATABASE={0};HOST={1};PASSWORD={2};USER ID={3}", database, hostname, password, username);  //配置数据库连接字符串
            npsqlconn = new NpgsqlConnection(connecstr);  //配置数据库连接
            try
            {
                npsqlconn.Open();
                string state = npsqlconn.State.ToString();  //监测连接状态
                if (state == "Open")
                {
                    return "connection_success";
                }
                else
                {
                    return "connection_failed";
                }
            }
            catch (Exception)
            {
                return "connection_error";
            }
        }
        /// 
        /// 向数据库插入一行记录
        /// 
        /// 
        public static int Add(string name, string telephone, string email)
        {
            string insert_sql = "insert into users(name,telephone,email) values(@name,@telephone,@email)";
            NpgsqlParameter[] values = new NpgsqlParameter[]
            {
                new NpgsqlParameter("@name",name),
                new NpgsqlParameter("@telephone",telephone),
                new NpgsqlParameter("@email",email)
            };
            int c = ExecuteCommand(insert_sql, values);   //返回受影响的行数
            return c;
        }
        /// 
        /// 更新数据库记录
        /// 
        /// 
        public static int Update(int id,string name,string telephone,string email)
        {
            string update_sql = "update users set name = @name,telephone=@telephone,email=@email where id = @id";
            NpgsqlParameter[] values = new NpgsqlParameter[]
            {
                new NpgsqlParameter("@id",id),
                new NpgsqlParameter("@name",name),
                new NpgsqlParameter("@telephone",telephone),
                new NpgsqlParameter("@email",email),
            };
            int c = NPGSQLHelper.ExecuteCommand(update_sql,values);
            return c;
        }
        /// 
        /// 删除数据
        /// 
        /// 
        public static int delete(int id)
        {
            string sql = "delete from users where id =" + id + "";
            int c = ExecuteNonQuery(sql);
            return c;
        }
        //public DataSet dataSet()
        //{
            
        //}
        public static int ExecuteNonQuery(string sqrstr)
        {
            try
            {
                using (NpgsqlCommand SqlCommand = new NpgsqlCommand(sqrstr, npsqlconn))
                {
                    int c = SqlCommand.ExecuteNonQuery();  //执行查询并返回受影响的行数
                    return c; //r如果是>0操作成功! 
                }
            }
            catch
            {
                return 0;
            }

        }
        //带参数的执行命令
        public static int ExecuteCommand(string sqrstr, params NpgsqlParameter[] values)
        {
            using (NpgsqlCommand cmd = new NpgsqlCommand(sqrstr,npsqlconn))
            {
                cmd.Parameters.AddRange(values);
                return cmd.ExecuteNonQuery();
            }
        }
      //获取数据
        public static DataSet GetData(string sqrstr)
        {
            using (NpgsqlCommand SqlCommand = new NpgsqlCommand(sqrstr, npsqlconn))
            {
                DataSet dataSet = new DataSet();
                NpgsqlDataAdapter nda = new NpgsqlDataAdapter(SqlCommand);
                nda.Fill(dataSet);
                return dataSet;
            }
        }
    }
}

4.结语

写完这个小程序感觉PostgreSQL和SQL server和MySQL的操作基本一致。当然这里只是简单的增删改查,里面更多的知识会在以后的学习中,慢慢分享。
Study hard and make progress every day。

有想要源码的同学请关注微信公众号“爱游戏爱编程”,后台回复“新数据库”即可获取。

 

C#结合ListView连接PostgreSQL实现增删改查_第6张图片

爱游戏爱编程.jpg

你可能感兴趣的:(C#)