65.9K
CodeProject 正在变化。 阅读更多。
Home

在 C# (.NET) 应用程序中使用 PostgreSQL(入门)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.92/5 (75投票s)

2008年11月15日

BSD

4分钟阅读

viewsIcon

809619

downloadIcon

15933

在本文中,我想一步一步地向您展示如何在 C# 应用程序中使用这个出色的数据库。

引言

在本文中,我想向您介绍在 .NET 应用程序中使用 PostgreSQL 数据库的基础知识。我之所以这样做,是因为 CodeProject 上关于 PostgreSQL 的文章很少,尽管它是一个非常好的关系数据库管理系统。我曾经在使用 PHP 作为我的主要编程语言时使用过 PostgreSQL,我想……嗯,为什么不在我的 C# 应用程序中使用它呢。

背景

我假设您对数据库、SQL 命令等有基本了解。

为什么选择 PostgreSQL

首先,它是免费的*,遵循 BSD 风格的自由(无论是自由还是免费),这意味着您的商业应用程序不会有许可问题。其次,它有一个非常好的过程语言叫做 PL/pgSQL(还有 Java、Perl、Python、Tcl(等)版本)。有许多社区支持它(大型社区如 Planet PostgreSQL,或博客,例如 "Depesz" 博客),最后,探索这个开源数据库的明珠也很有趣。

安装 PostgreSQL 和 .NET 数据提供程序

首先,请访问 PostgreSQL 网站。PostgreSQL 以拥有非常好的 文档系统而闻名。在本文中,我使用了 PostgreSQL v.8.3.4 和 PgAdmin III v. 1.8.4(该版本与 PostgreSQL 一起捆绑)。请记住安装数据库 PgAdmin III,但不要安装 Npgsql,因为其版本是 1.x,而我们将使用来自不同包的 v. 2.0。现在,如果您已经有一个正在运行的 PostgreSQL 服务器(这是一项非常容易的任务),让我们下载一些驱动程序。对于本文,我使用了 NpgSQL2,该版本直接为 MS .NET 构建。下载后,在 zip 包(\bin 目录)中,您会找到 Npgsql.dll,这就是我们要找的库。

使用 PgAdmin III

如果您曾经使用过任何数据库管理软件,例如 Aqua Data StudioSQL Manager(我每天都使用精简版),或者 MS Management Studio Express,您会发现 PgAdmin III 非常直观。它可能没有其他软件那么多花哨的功能,但它可以很好地完成工作。以下是几个您可能想知道如何执行的日常任务。

  1. 创建新用户(除非您真的不介意使用超级用户帐户 :-))
  2. How to create new role on the server

  3. 创建新数据库(相当明显,但仍然在此 :-))
  4. How to create new database in PgAdmin III

  5. 创建表
  6. How to create new table in PostgreSQL

  7. 向表中添加数据(当然,还有其他方法,但我将留给您去探索)
  8. How to add more tables

  9. 如果您正在寻找 MS-SQL 的Identity 功能,只需将您的列类型设置为serial,或在 文档中查找sequence。好吧,老实说,PgAdmin III 仍有改进空间……通过网格添加行时数字可能不会显示,但请相信我,它们就在那里 :-)。下次您重新加载带有网格的窗口时就会看到它们。
  10. 如果您想了解更多,请查阅 文档 :-)

创建数据库

这是一个 SQL 脚本,我们可以用它来创建我们的测试数据库。请记住创建数据库和用户。本文中我的用户将是adrian

CREATE TABLE simple_table
(
  id integer NOT NULL, -- SERIAL if like identity-like functionality
  tekst character varying(50),
  CONSTRAINT simple_table_pkey PRIMARY KEY (id)
)
WITH (OIDS=FALSE);
ALTER TABLE simple_table OWNER TO adrian; -- my user

-- i drop Polish letters so i don't have to worry about codepage
INSERT INTO simple_table (id, tekst) VALUES (1, 'jaki tekst');
INSERT INTO simple_table (id, tekst) VALUES (2, 'jaki inny tekst');
INSERT INTO simple_table (id, tekst) VALUES (3, 'jeszcze inny tekst');

在 C# 中使用 PostgreSQL

创建一个空的 Windows Forms 应用程序,并添加对 Npgsql.dll 的引用,如下图所示

Adding Npgsql provider

以 PostgreSQL 风格构建连接字符串

PostgreSQL 中的连接字符串是通过创建关键字=值;对来构成的(重要提示:最后一个元素也必须以';'结尾)。最基本的连接字符串是

  • Server - 指定服务器位置
  • User Id - 数据库用户名
  • Port - 默认为 5432
  • Password - 数据库用户的密码
  • Database - 数据库名称

简单的测试应用程序

using Npgsql;

namespace PostgreSQLTEst
{
    public partial class Form1 : Form
    {
        private DataSet ds = new DataSet();
        private DataTable dt = new DataTable();
        public Form1()
        {    
            InitializeComponent();    
        }
        private void llOpenConnAndSelect_LinkClicked(object sender, 
                     LinkLabelLinkClickedEventArgs e)
        {
            try
            {
                // PostgeSQL-style connection string
                string connstring = String.Format("Server={0};Port={1};" + 
                    "User Id={2};Password={3};Database={4};",
                    tbHost.Text, tbPort.Text, tbUser.Text, 
                    tbPass.Text, tbDataBaseName.Text );
                // Making connection with Npgsql provider
                NpgsqlConnection conn = new NpgsqlConnection(connstring);
                conn.Open();
                // quite complex sql statement
                string sql = "SELECT * FROM simple_table";
                // data adapter making request from our connection
                NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);
                // i always reset DataSet before i do
                // something with it.... i don't know why :-)
                ds.Reset();
                // filling DataSet with result from NpgsqlDataAdapter
                da.Fill(ds);
                // since it C# DataSet can handle multiple tables, we will select first
                dt = ds.Tables[0];
                // connect grid to DataTable
                dataGridView1.DataSource = dt;
                // since we only showing the result we don't need connection anymore
                conn.Close();
            }
            catch (Exception msg)
            {
                // something went wrong, and you wanna know why
                MessageBox.Show(msg.ToString());
                throw;
            }
        }
    }
}

效果

Working example

好了!:D。多练习 PostgreSQL,享受它吧!

最后的寄语

本文适合那些已经使用数据库几个月(甚至几年)并希望尝试不同东西的人。如果您正在寻找一个稳固、稳定、安全且相对快速的数据库——PostgreSQL 就是您的不二之选。它免费,具有一些很酷的功能(查看 文档您就会发现它们),并且是免费的。

希望您喜欢我的文章 :-)

最后的最后的话……:-)

该项目有两个依赖项。第一个是Npgsql.dll(提供程序),第二个是MultiCtrls(这是我在另一篇文章中构建的一个 DLL)。如果源文件有问题,请手动添加引用(MultiCtrls 已包含在 ZIP 文件中)。

© . All rights reserved.