使用 SharpDevelop 和 PostgreSQL 创建 CRUD 窗体






4.67/5 (5投票s)
本文是关于如何使用 SharpDevelop 和 PostgreSQL 创建 CRUD(创建、检索、更新和删除)表单的教程,其中实现了 BindingNavigator 来浏览应用程序中使用的表。
引言
本文是关于如何使用 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 数据编辑器插入数据
现在我们的数据库已准备就绪,我们可以创建我们的 SharpDevelop 项目。
创建解决方案
使用 SharpDevelop,创建一个新的解决方案,在 C# 类别下选择“Window Application”;在我们的示例中,解决方案名称将是 Music。由于我们将使用 PostgreSQL 作为我们的数据库服务器,因此必须将 Npgsql 库添加到我们的引用中。
- 在解决方案树中,转到 References。
- 使用鼠标右键单击选择 Add Reference 选项。
- 在 .NET Assembly Browser 选项卡中,查找 Npgsql DLL 文件(npgsql.dll 和 Mono.Security.dll);您可以使用本文配套 Zip 文件中的文件,或者可以从 Npgsql 网站下载最新的 Npgsql 二进制文件。
- 您必须编译您的解决方案,以便 Npgsql 组件在设计时在表单设计器中可用。
现在转到表单设计窗口。在这里,我们将添加将在表单中使用到的主要组件。选择并添加两个 Label
组件,并添加两个 TextBox
;在我们的示例中,我们的 TextBox
名称将是 t_artistID
和 t_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 |
这将是我们的更新命令。 |
好的,添加完所有这些组件后,我们的表单应该看起来像这样
我们必须设置组件属性,以便我们的 binding navigator 可以使用我们的 binding source 来浏览我们的数据,我们的 binding source 可以从 dataset 获取数据,dataset 可以使用 data adapter 填充,adapter 使用我们的命令来插入、删除、选择,然后我们的命令可以使用我们的连接访问数据库。很简单,嗯?好的,我们开始吧
- 在
BindingNavigator
bnavigator
上,将BindingSource
属性设置为bsource
。 - 在
BindingSource
bsource
上,将DataSource
属性设置为mainDS
。 - 在 connection 上,将
ConnectionString
属性设置为类似:HOST=localhost;DATABASE=music;USER ID=postgres;PASSWORD=admin(根据您的服务器主机、数据库和用户信息进行更改)。 - 在 adapter 上,将
DeleteCommand
、InsertCommand
、SelectCommand
和UpdateCommand
属性设置为各自的组件:cmdDelete
、cmdInsert
、cmdSelect
和cmdUpdate
。 - 现在我们必须编辑命令的属性,每个命令根据其功能进行设置;在四个组件上,我们必须将
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
您可以使用此图像
使用新创建按钮的 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");
}
}
好了,我们完成了。现在我们可以使用我们的新表单来创建、检索、更新和删除数据。