作者:王福驰
撰写时间:2019年 5月28日
开发工具与关键技术:XAML、WPF
这和我之前发Service+Client的项目有关。
在WPF中我们怎么从数据库传出数据给到页面。
一、首先在SQL的项目数据库中在可编程序的存储过程新建一个存储过程;如下图:
ALTER PROCEDURE [dbo].[FRM_Login]
@type NCHAR(200)='',@Accounts CHAR(30)='',@Password CHAR(30)=''
AS
BEGIN
IF(@type='frmLogin_btn_Login_Click_SelectLogin')
BEGIN
--登录 by 账号和密码--
SELECT t_operators.operator_id,
t_operators.staff_id,
RTRIM(t_operators.operator_accounts) AS Accounts,
RTRIM(t_operators.operator_password) AS Password,
RTRIM(t_detailed_attribute_gather.detailed_attribute_gather_name) AS branch,
RTRIM(t_staff.staff_name) AS staff_name
FROM t_operators INNER JOIN
t_staff ON t_operators.staff_id = t_staff.staff_id INNER JOIN
t_detailed_attribute_gather ON t_staff.as_employee_type_id = t_detailed_attribute_gather.detailed_attribute_gather_id
WHERE dbo.t_operators.effective=1 AND operator_accounts=@Accounts AND operator_password=@Password
END
END
当你写好SQL语句,执行一下看看有没有数据。如果没有问题,进行下一步。
二、打开我们新建的Service+Client的项目,打开服务层和客户端。
打开服务层的DAL层的Class1.cs,把名字重命名DALMethod.cs,写上与数据库连接代码,如下图:
public class DALMethod
{
#region 连接字符串
//public string strConnect = @"Data Source=DESKTOP-AL06PPP\SQL;Initial Catalong=TTS;User ID=sa;Password=sa123";
public string strConnect = @"Data Source=127.0.0.1;Initial Catalog=TTS;User ID=sa;Password=sa@123";
#endregion
#region 插入、更新、删除
public int UpdateData(String sql, SqlParameter[] param)
{
//实例化(内存数据表)
int count = 0;
//数据库建立连接
using (SqlConnection conn = new SqlConnection(strConnect))
{
//打开数据库连接
conn.Open();
//数据库插入更新操作
SqlCommand cmd = new SqlCommand(sql, conn);
//获取存储过程名称
cmd.CommandType = CommandType.StoredProcedure;
//获取存储过程的存储语句
cmd.Parameters.AddRange(param);
count = cmd.ExecuteNonQuery();
conn.Close();
}
return count;
}
#endregion
#region 查询数据表
public DataTable QueryDataTable(String sql, SqlParameter[] param)
{
DataTable dt = new DataTable();
//数据库建立连接
using (SqlConnection conn = new SqlConnection(strConnect))
{
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.AddRange(param);
//数据库查询
da.Fill(dt);
conn.Close();
}
return dt;
}
#endregion
#region 查询数据集
public DataSet QueryDataSet(String sql, SqlParameter[] param)
{
DataSet ds = new DataSet();
using (SqlConnection conn = new SqlConnection(strConnect))
{
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.AddRange(param);
da.Fill(ds);
conn.Close();
}
return ds;
}
#endregion
#region 二进制文件查询方法
public byte[] QueryDataByte(String sql, SqlParameter[] parm)
{
using (SqlConnection conn = new SqlConnection(strConnect))
{
conn.Open();//打开连接
SqlDataReader dr = null;//初始化数据读取器
SqlCommand cmd = new SqlCommand(sql, conn);//创建命令对象
cmd.CommandType = CommandType.StoredProcedure;//设置命令类型
cmd.Parameters.AddRange(parm);//把参数加进命令对象
dr = cmd.ExecuteReader();//启动dr
byte[] File = null;//初始化byte
if (dr.Read())//执行把二进制流加进byte[]中
{
File = (byte[])dr[0];
}
dr.Close();//关闭数据读取器
conn.Close();//关闭连接
return File;
}
}
#endregion
}
连接字符串中Data Source代表数据库服务器名称,Initial Catalog代表数据库名称,User ID 数据库的登录名,Password数据库的密码,这个必须得有,否则连接不上数据库。
打开服务层的DAL层的Class1.cs,把名字重命名Login.cs,
第一步写我们的(服务契约)定义服务协议,在这里BLL中引用一个ServiceModel的程序集
否我们无法引用的服务契约,如下图:
只有引用成功,出现using System.ServiceModel,我们才能使用WPF的服务契约。
在BLL中实例化DAL,接着写我们想要的代码,就可以新建服务了
三、在新建的Service+Client的项目,我们已经配置服务行为,这是一个重要的步骤,一定要配置好,否则我们新建服务就没有用了。
一样的找到Web.config点击右键,点击编辑WCF配置,弹出服务配置编辑器窗口,直接在右边点击新建服务,弹出新建服务窗口,如下图:
点击浏览,返回上一层,
找到BLL,点击BLL,
再点击bin,再点击Debug
接着弹出两个文件,点击BLL.dll,点击BLL.Login
接着点击下一步,复制约定BLL.Login,一直下一步,直到终结点地址是什么,把地址里的http//去掉,让它为空,如下图。点击下一步
它会弹出一个窗口,点击是
然后点击完成
点击左边的高级里面的宿主环境里面的serviceActivations,再点击右下角的新建,如下图
弹出窗口,在Service粘贴我们复制的BLL.Login,RelativeAddress中粘贴我们复制的BLL.Login在后面加上.svc。
再来配置服务的终结点,名称还是我们复制的BLL.Login。如下图
再点击左边服务的BLL.Login,把BehaviorConfiguration的空白处选择BLL。如下图
最后运行我们服务层,把连接http://localhost:4587改为
http://localhost:4587/BLL.Login.svc,只有出现已创建服务,才是真正创建成功
四、打开客户端,新增一个文件夹,来放我们的服务。
右键点击引用,点击添加服务引用。
复制http://localhost:4587/BLL.Login.svc粘贴到地址,点击传到,只有在下面写着找到1个服务,才有效。命名空间我为了方便直接和服务端一样。
点击确定,在解决方案里我们创建的文件夹里出现BLL.Longin。
这就是一个完整的新建服务。