PostGreSQL中没有了像MSSql中的存储过程,但是有一个替代的都东西可以使用,就是函数,对于函数的使用方法,比如创建一个简单的查询一个表中的所有记录,我们这里根据这个公司所在地点来查询,这是一个Point类型,对于这种结合类型比较要'~='符号,下面类出表定义的SQL语句
Create table Google_Company(
ID SERIAL, --SERIAL 是PostGreSql中的数据类型,相当于Mssql中的自增类型
Name varchar(50),
Geometry Point,
Description varchar(255),
CONSTRAINT Google_CompanyKey PRIMARY KEY(ID)
)
插入两条数据
insert into google_company(companyname,geometry,abstract,url,image,subcategoryid) values('csu',point(28.5,113.0),'test','http://www.google.cn','d:',1);
insert into google_company(companyname,geometry,abstract,url,image,subcategoryid) values('csu',point(28.3,112.99),'test','http://www.google.cn','d:',1)
创建函数
Create function ListCompany(Geometry) RETURNS SETOF Google_Company
$$
select * from google_company where geometry~=$1 --这里$1表示传进来的第一个传输,$n表示第n个参数
$$ LANGUAGE SQL
这样一个postGreSQL中的函数就创建好了,下面我们在.net中使用它将其查询出来,这里我们引进一个新的dataprovider,在安装了postGreSQL中后就有一个Npgsql目录,里面有可以在.net中查询postGreSQL中数据的组件,在你的项目中引用它就可以了,而且其封装的很好,很遵循标准的ADO.NET模型
下面是根据上述建立表和函数来尽心在客户端查询的C#代码,放出来给大家参考参考,然后还有一个连接字符串,
<add key="postGres" value="Server=127.0.0.1;Port=5432;User Id=postgres;Password=123;Database=MyGoogle;Encoding=UNICODE;"/>
using (NpgsqlConnection conn = new NpgsqlConnection(WebConfigurationManager.AppSettings["postGres"]))
{
NpgsqlCommand cmd = new NpgsqlCommand();
cmd.CommandText = "ListCompany(:pt)";
cmd.Parameters.Add(new NpgsqlParameter("pt", NpgsqlDbType.Point));
cmd.Parameters[0].Value = new NpgsqlPoint(loc.X, loc.Y);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = conn;
conn.Open();
NpgsqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
_member.CompanyID = Convert.ToInt32(dr["companyID"]);
_member.Geometry = (NpgsqlPoint)dr["geometry"];
_member.Image = dr["image"].ToString();
_member.URL = dr["URL"].ToString();
_member.CompanyName = dr["companyname"].ToString();
_member.Abstract = dr["abstract"].ToString();
_member.SubCategoryID = Convert.ToInt32(dr["subcategoryID"]);
}
conn.Close();
lblCompanyName.Text = _member.CompanyName;
lblAbstract.Text = _member.Abstract;
}