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

使用 SharpDevelop 和 PostgreSQL 创建 CRUD 窗体

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (5投票s)

2009年10月21日

CPOL

5分钟阅读

viewsIcon

63759

downloadIcon

2391

本文是关于如何使用 SharpDevelop 和 PostgreSQL 创建 CRUD(创建、检索、更新和删除)表单的教程,其中实现了 BindingNavigator 来浏览应用程序中使用的表。

CRUD Form with SharpDevelop and PostgreSQL

引言

本文是关于如何使用 SharpDevelop 和 PostgreSQL 创建 CRUD(创建、检索、更新和删除)表单的教程,其中实现了 BindingNavigator 来浏览应用程序中使用的表。我们将使用 SharpDevelop 3.1、适用于 Windows 的 PostgreSQL 8.3,当然还有 Npgsql,以便我们可以将应用程序连接到 PostgreSQL 服务器。

背景

BindingNavigator 是一个非常有用的控件,它可以在 C# 表单中使用,用于显示和编辑来自 SQL 源或只是数据存储(XML、文本文件)的数据;然而,大多数教程和示例都面向 Visual Studio 和数据库服务器(如 MS SQL Server)。通过本教程,您将能够使用 BindingNavigator 构建一个功能齐全的有用表单,但将使用出色的 IDE SharpDevelop。

您需要什么?

您需要安装 .NET Framework(当然),SharpDevelop 3.1(在撰写本文时,SharpDevelop 的稳定且最新版本是 3.1),适用于 Windows 的 PostgreSQL 8.3,以及一个良好的数据库管理工具来创建和编辑数据库模式:pgAdmin 3 是一个不错的选择,它包含在 Postgres 安装程序中;您需要 Npgsql,但它包含在本文章链接的 Zip 文件中。

创建数据库

我们将创建一个包含单个表的小型数据库。我们的表名为 artists,将用于存储我们的主要数据集。您需要首先在 PgAdmin 中创建数据库;在我们的示例中,我们的数据库将名为 music

然后,您应该创建将在我们的表单中使用的表

/* This is our table to store the artists info, 
   we define a primary key so we can edit our data in PgAdmin */
CREATE TABLE artists
(
 artistid integer NOT NULL,
 name character varying NOT NULL DEFAULT 100,
 CONSTRAINT pk_artist PRIMARY KEY (artistid)
);

现在您应该在表中插入几行,以便最终可以测试在我们的表单中编辑数据的能力。您可以使用 PgAdmin 数据编辑器插入数据

Artists Data

艺术家数据

现在我们的数据库已准备就绪,我们可以创建我们的 SharpDevelop 项目。

创建解决方案

使用 SharpDevelop,创建一个新的解决方案,在 C# 类别下选择“Window Application”;在我们的示例中,解决方案名称将是 Music。由于我们将使用 PostgreSQL 作为我们的数据库服务器,因此必须将 Npgsql 库添加到我们的引用中。

  1. 在解决方案树中,转到 References。
  2. 使用鼠标右键单击选择 Add Reference 选项。
  3. 在 .NET Assembly Browser 选项卡中,查找 Npgsql DLL 文件(npgsql.dllMono.Security.dll);您可以使用本文配套 Zip 文件中的文件,或者可以从 Npgsql 网站下载最新的 Npgsql 二进制文件。
  4. 您必须编译您的解决方案,以便 Npgsql 组件在设计时在表单设计器中可用。

现在转到表单设计窗口。在这里,我们将添加将在表单中使用到的主要组件。选择并添加两个 Label 组件,并添加两个 TextBox;在我们的示例中,我们的 TextBox 名称将是 t_artistIDt_name

在 Tools 菜单的 Data 类别下,选择并将这些组件添加到表单中

组件 (Component) 名称 必需组件
BindingSource bsource 它将用作 binding navigator 和数据之间的链接。
BindingNavigator bnavigator 它将用作我们对数据的主要控制。
DataSet mainDS 此组件将用作我们的主要数据源。

现在,在 Custom Components 下,您必须添加这些组件

组件 (Component) 名称 必需组件
NpgsqlConnection 连接 与 PG 服务器的连接。
NpgsqlDataAdapter adapter 此组件将使用下面显示的命令将我们的控件连接到我们的表。
NpgsqlCommand cmdSelect 这将是我们的创建命令。
NpgsqlCommand cmdInsert 这将是我们的检索命令。
NpgsqlCommand cmdDelete 这将是我们的删除命令。
NpgsqlCommand cmdUpdate 这将是我们的更新命令。

好的,添加完所有这些组件后,我们的表单应该看起来像这样

Form with components

设置属性

我们必须设置组件属性,以便我们的 binding navigator 可以使用我们的 binding source 来浏览我们的数据,我们的 binding source 可以从 dataset 获取数据,dataset 可以使用 data adapter 填充,adapter 使用我们的命令来插入、删除、选择,然后我们的命令可以使用我们的连接访问数据库。很简单,嗯?好的,我们开始吧

  1. BindingNavigator bnavigator 上,将 BindingSource 属性设置为 bsource
  2. BindingSource bsource 上,将 DataSource 属性设置为 mainDS
  3. 在 connection 上,将 ConnectionString 属性设置为类似:HOST=localhost;DATABASE=music;USER ID=postgres;PASSWORD=admin(根据您的服务器主机、数据库和用户信息进行更改)。
  4. 在 adapter 上,将 DeleteCommandInsertCommandSelectCommandUpdateCommand 属性设置为各自的组件:cmdDeletecmdInsertcmdSelectcmdUpdate
  5. Adapter Properties

  6. 现在我们必须编辑命令的属性,每个命令根据其功能进行设置;在四个组件上,我们必须将 Connection 属性设置为使用我们的连接组件。
    • cmdSelect 上,将 Command Text 属性设置为:SELECT artistID,name FROM artists
    • cmdInsert 上,将 Command Text 属性设置为:INSERT INTO artists (artistID,name) VALUES (:p_artistID , :p_name)。注意::p_xxx 是 SQL 命令使用的参数;稍后,我们将这些参数绑定到表单中的 TextBox 元素。
    • cmdUpdate 上,将 Command Text 属性设置为:UPDATE artists SET name=:p_name WHERE artistID=:p_artistID
    • cmdDelete 上,将 Command Text 属性设置为:DELETE FROM artists WHERE artistID=:p_artistID

好的,就是这样,我们的属性已设置完毕。现在我们必须输入用于绑定控件的代码,双击表单以打开 MainFormLoad 事件处理程序,然后我们必须编写我们的小段代码。

您必须添加

Using Npgsql;

在您的 Music.cs 文件的开头,紧跟在其他 using 子句之后。

现在,让我们看看 MainFormLoad 代码

void MainFormLoad(object sender, EventArgs e)
{
 // We fill our DataSet and we set the table in the Dataset as "artists"

 adapter.Fill(mainDS,"artists");

 // We must set the DataMember property in the BindingSource
 // it cannot be set at the designer since our DataSet isn't populated

 bsource.DataMember="artists";

 // We add the DataBinding to the TextBox linked to the "Text" property
 // and linked to the BindingSource

 t_artistID.DataBindings.Add("Text",bsource,"artistid");
 t_name.DataBindings.Add("Text",bsource,"name");

 // Now we must set the Relation between the parameters and the fields 
 // in the Database

 cmdInsert.Parameters.Add(new NpgsqlParameter("p_artistID", 
                          NpgsqlTypes.NpgsqlDbType.Integer,0,"artistid"));
 cmdInsert.Parameters.Add(new NpgsqlParameter("p_name", 
                          NpgsqlTypes.NpgsqlDbType.Varchar,0,"name"));
 cmdDelete.Parameters.Add(new NpgsqlParameter("p_artistID", 
                          NpgsqlTypes.NpgsqlDbType.Integer,0,"artistid"));
 cmdUpdate.Parameters.Add(new NpgsqlParameter("p_artistID", 
                          NpgsqlTypes.NpgsqlDbType.Integer,0,"artistid")); 
 cmdUpdate.Parameters.Add(new NpgsqlParameter("p_name", 
                          NpgsqlTypes.NpgsqlDbType.Varchar,0,"name"));
}

请注意,在每个命令上,我们都必须设置此命令使用的参数,并特别注意根据数据库中的数据类型设置它们各自的 DBType

好了,我们快完成了;我们必须添加的唯一内容是保存按钮,因为如果我们不保存当前数据,我们的插入、删除和更新操作将不会发送到数据库。

转到代表我们 BindingNavigator 的工具栏,并添加一个新的 Button

Binding Navigator Tool Bar

您可以使用此图像

Save Button

使用新创建按钮的 Image 属性。现在,双击新按钮以打开按钮事件处理程序

void ToolStripButton1Click(object sender, EventArgs e)
{
    // We call this method to officially end the editing of the Bindingsource
    bsource.EndEdit();
    
    // Now we will try to update our table
    try {
        adapter.Update(mainDS.Tables["artists"]);
    }
    
    // We must catch the Exception, because the user may cause a SQL exception 
    catch (Exception e_exception)
    {
        MessageBox.Show("Error.... "+e_exception.Message,"Error trying to commit");
    }
}

好了,我们完成了。现在我们可以使用我们的新表单来创建、检索、更新和删除数据。

© . All rights reserved.