WPF之新建服务

作者:王福驰

撰写时间:2019 528

开发工具与关键技术:XAMLWPF

 

这和我之前发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。

这就是一个完整的新建服务。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以按照以下步骤在 Wpf新建一个 DataGrid: 1.在 Visual Studio 中创建一个 Wpf 应用程序。 2.在 MainWindow.xaml 页面中,将 DataGrid 添加到 XAML 中。 3.添加必要的命名空间。 4.为 DataGrid 添加列(可以使用 XAML 或代码)。 5.将 DataGrid 绑定到数据源。 以下是一个简单的示例: MainWindow.xaml: ``` xml <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApp1" Title="MainWindow" Height="350" Width="525"> <Grid> <DataGrid ItemsSource="{Binding Customers}" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="Name" Binding="{Binding Name}"/> <DataGridTextColumn Header="Age" Binding="{Binding Age}"/> </DataGrid.Columns> </DataGrid> </Grid> </Window> ``` MainWindow.xaml.cs: ``` csharp public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = new MainViewModel(); } } public class Customer { public string Name { get; set; } public int Age { get; set; } } public class MainViewModel { public ObservableCollection<Customer> Customers { get; set; } public MainViewModel() { Customers = new ObservableCollection<Customer> { new Customer { Name = "Alice", Age = 20 }, new Customer { Name = "Bob", Age = 30 }, new Customer { Name = "Charlie", Age = 40 }, }; } } ``` 在这个示例中,我们创建了一个包含两个属性(Name 和 Age)的 Customer 类,然后在 MainWindow 中创建了一个 DataGrid,并将其绑定到一个 ObservableCollection<Customer> 类型的 Customers 属性。我们通过设置 AutoGenerateColumns="False" 属性来禁用自动生成列,并手动添加了两列。最后,我们在 MainWindow 构造函数中将窗口的 DataContext 设置为 MainViewModel,以便在 XAML 中可以正确地绑定到 Customers 属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值