一起谈.NET技术,Silverlight与PostgreSQL数据库的互操作(CURD完全解析)

本文涉及的产品
PolarDB Agent Express,2核4GB
PolarDB Agent Flow,2核4GB
PolarSearch,搜索节点 4核8GB
简介:   今天将为大家介绍如何让Silverlight使用PostgreSQL作为后台数据库以及CURD操作。  准备工作   1)建立起测试项目   细节详情请见强大的DataGrid组件[2]_数据交互之ADO.NET Entity Framework——Silverlight学习笔记[10]。

  今天将为大家介绍如何让Silverlight使用PostgreSQL作为后台数据库以及CURD操作。

  准备工作 

  1)建立起测试项目 

  细节详情请见强大的DataGrid组件[2]_数据交互之ADO.NET Entity Framework——Silverlight学习笔记[10] 

  2)创建测试用数据库 

  使用pgAdmin III,按下图所示,创建一个名为employeesPostgreSQL数据库,建立数据表名称为Employee。(注意:处理数据库对象时,PostgreSQLPL/pgSQL语言具有区分大小写的内在属性数据表名和列名均需使用双引号包住,引用自链接)【我用的PostgreSQL数据库版本为8.3.7点击下载

  点击pgAdmin III工具栏上的“执行任意的SQL查询”[笔和纸的按钮],在弹出的窗口中输入如下SQL语句:

  
  
CREATE TABLE "Employee"
(
"EmployeeID"
integer NOT NULL DEFAULT nextval( ' employees_employeeid_seq ' ::regclass),
"EmployeeName"
character varying ( 45 ) NOT NULL ,
"EmployeeAge"
integer NOT NULL ,
CONSTRAINT employees_pkey PRIMARY KEY ("EmployeeID")
)
WITH (OIDS = FALSE);
ALTER TABLE "Employee" OWNER TO postgres;

 然后按“执行查询”按钮[绿色实心三角按钮]


  3)下载Npgsql

  为了能让.NET操作PostgreSQL数据库,请务必下载。【点击:下载

下载解压后,将bin文件夹中的全部内容复制到服务端项目文件夹下的bin文件夹中(之后,将该文件夹包含进来),便于管理引用。

  建立数据模型

EmployeeModel.cs文件(放置在服务端项目文件夹下)

  
  
using System;
using System.Collections.Generic;
using System.Linq;
namespace dataformpostgresqldb
{
public class EmployeeModel
{
public int EmployeeID { get ; set ; }
public string EmployeeName { get ; set ; }
public int EmployeeAge { get ; set ; }
}
}

 

  建立服务端Web Service

  右击服务端项目文件夹,选择Add->New Item....,按下图所示建立一个名为EmployeesInfoWebService.asmxWeb Service,作为SilverlightMySQL数据库互操作的桥梁。


  
 Silverlight客户端应用程序文件夹下,右击References文件夹,添加名为NpgSql的命名空间(如下图)。


  之后,双击
EmployeesInfoWebService.asmx打开该文件,将里面的内容修改如下:

  
  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data;
using Npgsql; // 引入该命名空间是为了操作PostgreSQL数据库
namespace dataformpostgresqldb
{
/// <summary>
/// Summary description for EmployeesInfoWebService
/// </summary>
[WebService(Namespace
= " http://tempuri.org/ " )]
[WebServiceBinding(ConformsTo
= WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(
false )]
// To allow this Web Service to be called from script,
using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class EmployeesInfoWebService : System.Web.Services.WebService
{
[WebMethod]
// 获取雇员信息
public List < EmployeeModel > GetEmployeesInfo()
{
List
< EmployeeModel > returnedValue = new List < EmployeeModel > ();
NpgsqlCommand Cmd
= new NpgsqlCommand();
SQLExcute(
@" SELECT * FROM ""Employee"" ORDER BY ""EmployeeID"" ASC " , Cmd);
NpgsqlDataAdapter EmployeeAdapter
= new NpgsqlDataAdapter();
EmployeeAdapter.SelectCommand
= Cmd;
DataSet EmployeeDataSet
= new DataSet();
EmployeeAdapter.Fill(EmployeeDataSet);
foreach (DataRow dr in EmployeeDataSet.Tables[ 0 ].Rows)
{
EmployeeModel tmp
= new EmployeeModel();
tmp.EmployeeID
= Convert.ToInt32(dr[ 0 ]);
tmp.EmployeeName
= Convert.ToString(dr[ 1 ]);
tmp.EmployeeAge
= Convert.ToInt32(dr[ 2 ]);
returnedValue.Add(tmp);
}
r
eturn returnedValue;
}
[WebMethod]
// 添加雇员信息
public void Insert(List < EmployeeModel > employee)
{
employee.ForEach(x
=>
{
string CmdText = @" INSERT INTO "
"Employee""(""EmployeeName"",""EmployeeAge"")
VALUES('
" + x.EmployeeName + " ', " + x.EmployeeAge.ToString() + " ) " ;
SQLExcute(CmdText);
});
}
[WebMethod]
// 更新雇员信息
public void Update(List < EmployeeModel > employee)
{
employee.ForEach(x
=>
{
string CmdText = @" UPDATE ""Employee"
" SET ""EmployeeName""='
" + x.EmployeeName + @" ',""EmployeeAge""= "
+
x.EmployeeAge.ToString();
CmdText
+= @" WHERE ""EmployeeID""= " + x.EmployeeID.ToString();
SQLExcute(CmdText);
});
}
[WebMethod]
// 删除雇员信息
public void Delete(List < EmployeeModel > employee)
{
employee.ForEach(x
=>
{
string CmdText = @" DELETE FROM ""Employee"
" WHERE ""EmployeeID""=
" + x.EmployeeID.ToString();
SQLExcute(CmdText);
});
}
// 执行SQL命令文本,重载1
private void SQLExcute( string SQLCmd)
{
string ConnectionString =
" server=localhost;uid=postgres;pwd=yourpwd;database=employees " ;
NpgsqlConnection Conn
= new NpgsqlConnection(ConnectionString);
Conn.Open();
NpgsqlCommand Cmd
= new NpgsqlCommand();
Cmd.Connection
= Conn;
Cmd.CommandTimeout
= 15 ;
Cmd.CommandType
= System.Data.CommandType.Text;
Cmd.CommandText
= SQLCmd;
Cmd.ExecuteNonQuery();
Conn.Close();
}
// 执行SQL命令文本,重载2
private void SQLExcute( string SQLCmd, NpgsqlCommand Cmd)
{
string ConnectionString =
" server=localhost;uid=postgres;pwd=yourpwd;database=employees " ;
NpgsqlConnection Conn
= new NpgsqlConnection(ConnectionString);
Conn.Open();
Cmd.Connection
= Conn;
Cmd.CommandTimeout
= 15 ;
Cmd.CommandType
= System.Data.CommandType.Text;
Cmd.CommandText
= SQLCmd;
Cmd.ExecuteNonQuery();
}
}
}

  在Silverlight客户端应用程序文件夹下,右击References文件夹,选择菜单选项Add Service Reference...。如下图所示,引入刚才我们创建的Web Service(别忘了按Discover按钮进行查找)。


  创建Silverlight客户端应用程序

  详情参见我的[原创]SilverlightAccess数据库的互操作(CURD完全解析)

  最终效果图

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
传感器 人工智能 物联网
穿戴科技新风尚:智能服装设计与技术全解析
穿戴科技新风尚:智能服装设计与技术全解析
1026 85
|
存储 缓存 自然语言处理
评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
391 8
评论功能开发全解析:从数据库设计到多语言实现-优雅草卓伊凡
|
12月前
|
存储 关系型数据库 数据库
高性能云盘:一文解析RDS数据库存储架构升级
性能、成本、弹性,是客户实际使用数据库过程中关注的三个重要方面。RDS业界率先推出的高性能云盘(原通用云盘),是PaaS层和IaaS层的深度融合的技术最佳实践,通过使用不同的存储介质,为客户提供同时满足低成本、低延迟、高持久性的体验。
|
编解码 监控 网络协议
RTSP协议规范与SmartMediaKit播放器技术解析
RTSP协议是实时流媒体传输的重要规范,大牛直播SDK的rtsp播放器基于此构建,具备跨平台支持、超低延迟(100-300ms)、多实例播放、高效资源利用、音视频同步等优势。它广泛应用于安防监控、远程教学等领域,提供实时录像、快照等功能,优化网络传输与解码效率,并通过事件回调机制保障稳定性。作为高性能解决方案,它推动了实时流媒体技术的发展。
705 5
|
数据采集 机器学习/深度学习 存储
可穿戴设备如何重塑医疗健康:技术解析与应用实战
可穿戴设备如何重塑医疗健康:技术解析与应用实战
782 4
|
机器学习/深度学习 人工智能 自然语言处理
AI技术如何重塑客服系统?解析合力亿捷AI智能客服系统实践案例
本文探讨了人工智能技术在客服系统中的应用,涵盖技术架构、关键技术和优化策略。通过感知层、认知层、决策层和执行层的协同工作,结合自然语言处理、知识库构建和多模态交互技术,合力亿捷客服系统实现了智能化服务。文章还提出了用户体验优化、服务质量提升和系统性能改进的方法,并展望了未来发展方向,强调其在客户服务领域的核心价值与潜力。
839 6
|
监控 负载均衡 安全
静态IP代理与动态IP代理:提升速度与保障隐私的技术解析
本文探讨了静态IP代理和动态IP代理的特性和应用场景。静态IP代理通过高质量服务提供商、网络设置优化、定期更换IP与负载均衡及性能监控提升网络访问速度;动态IP代理则通过隐藏真实IP、增强安全性、绕过封锁和提供独立IP保障用户隐私。结合实际案例与代码示例,展示了两者在不同场景下的优势,帮助用户根据需求选择合适的代理服务以实现高效、安全的网络访问。
513 1
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
898 140
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1419 29

推荐镜像

更多
  • DNS