WPF时间段查询

开发工具与关键技术:Visual Studio 2017

作者:邓崇富

撰写时间:2019 年 8 月 17 日

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

在一些的数据报表中经常用到的就是时间短的查询来筛选所需要的数据,在斯

筛选数据时有两种方法,一种是在后台用Linq语句来赛选数据,另外一种就是在数据库的存储过中写,当然如果要考虑到查询数据的性能方面的话,就用数据库的存储过程比较好。

下面是在后台用Linq语句来赛选数据的详细代码:

  string startdatestr = startdate.ToString("yyyy-MM-dd") + " 00:00:00";
         string enddatestr = enddate.ToString("yyyy-MM-dd") + " 23:59:59";
     string sql = string.Format(" BETWEEN '{0}' AND '{1}' ", startdate, enddate);

因为 datetimepicker控件的时分秒是当前时间的,所以你要重设时分秒,用最大的可能,这样就不会少数据了;

只要年月的话同理把“日”加上,startdate用1日,enddate...(28,29,30,31)都有可能

下面是数据库存储过程时间段查询的详细代码:

 

--查询船名/船次信息

IF(@Type='SelectShip')

    BEGIN

      SELECT      

            RTRIM(PW_ShipsName.ShipsNameID) as ShipsNameID,--船名ID

            RTRIM(PW_ShipsName.ShipsName) as ShipsName,--船名名称

            RTRIM(PW_ShipsName.Voyage) as Voyage,--船次

            RTRIM(PW_ShipDate.SailingDate) as SailingDate--开船日期

      FROM   PW_ShipsName

      left join PW_ShipDate on PW_ShipsName.ShipsNameID = PW_ShipDate.ShipsNameID

      where PW_ShipDate.SailingDate between @StartDate and @StopDate

    END

在存储过程里首先必须声明项目里面传来的两个数据值(@StartDate,@StopDate)这两个值的默认值为空,然后在存储过程语句中的FROM后面=添加一条Where条件语句(where PW_ShipDate.SailingDate between @StartDate and @StopDate)SailingDate是数据表里的日期列名;between……and语句是包括首尾的两个日期的,如果需要不包括首尾两个日期,可以这样写:where PW_ShipDate.SailingDate > @StartDate and PW_ShipDate.SailingDate < @StopDate

下面是页面的代码:

<TextBlock HorizontalAlignment="Left" Margin="331,4,0,0" Text="开船日期:"  VerticalAlignment="Top" Height="20"  Width="62" FontSize="14" Foreground="Gray"/>

                            <DatePicker  x:Name="StartShipDate"  HorizontalAlignment="Left" Height="24"  Margin="398,2,0,0" VerticalAlignment="Top" Width="115"/>

                            <TextBlock HorizontalAlignment="Left" Margin="518,6,0,0" Text="~" VerticalAlignment="Top" Height="20"  Width="22" FontSize="14" Foreground="Gray"/>

                            <DatePicker x:Name="StopShipDate"  HorizontalAlignment="Left" Height="24" Margin="545,4,0,0" VerticalAlignment="Top" Width="109"/>

 页面效果如下图:

下面是页面后台的代码:

/// <summary>

        /// 搜索按钮事件

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void btn_SelectShip(object sender, System.Windows.RoutedEventArgs e)

        {

            DateTime StartDate = Convert.ToDateTime(StartShipDate.Text.ToString());

            DateTime StopDate = Convert.ToDateTime(StopShipDate.Text.ToString());

          

            //获取全部数据

            DataTable dtselect = myClient.UC_SelectShip(StartDate, StopDate).Tables[0];

            //绑定表格数据

            dgData.ItemsSource = dtselect.DefaultView;

        }

下面是服务层的代码:

//(操作契约)查询船名/船次信息数据

        [OperationContract]

        public DataSet UC_SelectShip(DateTime StartDate, DateTime StopDate)

        {

            //1.0实例化对象数组(序列化参数)

            SqlParameter[] mySqlParameters = {

                //定义传递参数,以及传递参数的类型

                new SqlParameter("@type",SqlDbType.NChar),

                new SqlParameter("@StartDate",SqlDbType.DateTime),

                new SqlParameter("@StopDate",SqlDbType.DateTime),

            };

            mySqlParameters[0].Value = "SelectShip";//获取执行的存储过程名称 

            mySqlParameters[1].Value = StartDate;

            mySqlParameters[2].Value = StopDate;

            DataSet ds = myDALMethod.QueryDataSet("SelectBasicData", mySqlParameters);

            // 返回值

            return ds;

        }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值