敲机房中看着同期的人的博客,学习存储过程的使用,在查询记录和金额查询这里,拥有共同的窗体,所以自己就使用了模板方法+存储过程!查询日期的过程让我遇到了问题。

实体中声明了3个字段,分别是数据表起始日期终止日期

然后把dateTimepicker控件中的值分别给字段,数据表的值【通过重写模板类中的虚方法得到】

//实体层赋值
//-----------选择数据表
queryCash.Tablename = GetDbTableName();//-----------选择字段
//dateTimePicker1.CustomFormat = "yyyy-MM-dd";
//dateTimePicker2.CustomFormat = "yyyy-MM-dd";string[] date1 = dateTimePicker1.Value.ToString("yyyy-MM-dd").Split(' ');
string[] date2 = dateTimePicker2.Value.ToString("yyyy-MM-dd").Split(' ');queryCash.Cmdfiled1 = date1[0];
queryCash.Cmdfiled2 = date2[0];

在这里,dateTimepicker获得的日期默认的格式:yyyy-MM-dd hh:mm:ss.000

这个时候需要先将日期类型转换为字符串类型,然后截取字符串获得日期就可以了,不能使用CustomFormat,这个只是显示日期类型,并没有将值转换为字符串!

通过中间的传递,到D层的时候

namespace DAL
{class QueryCashTemplateDAL : IDAL.QueryCashTemplate{public DataTable queryCash(QueryCash queryCash){SqlHelper sqlHelper = new SqlHelper();SqlParameter[] sqlParams = {new SqlParameter("@cmdfiled1",queryCash.Cmdfiled1),new SqlParameter("@cmdfiled2",queryCash.Cmdfiled2),new SqlParameter("@tablename", queryCash.Tablename)};string sql = "PROC_CheckCashDouble";DataTable table = sqlHelper.ExecuteQuery(sql, sqlParams, CommandType.StoredProcedure);return table;}}
}

D层调用存储过程

一开始写的存储过程中最关键的的语句是这样的,我以为它执行的时候,会将表名,两个日期以字符串的格式传过来,这样运行整个sql语句【本质是字符串】就可以了。

我以为的过程:

但实际数据库里的执行:

但后来执行,明明数据库里是有记录的,但查询不出来,原因是sql语句在执行的时候,将两个字符串类型的日期当做日期类型识别处理,用日期类型的值数据库里字符串类型的值做匹配,当然不成功,所以查不出来!

USE [ChargeSystem]
GO
/****** Object:  StoredProcedure [dbo].[PROC_CheckCashDouble]    Script Date: 2018/9/20 19:00:43 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:赵芬
-- Create date: 2018-9-18
-- Description: 用于查询(收取和返回)金额时和数据库交互
-- =============================================
ALTER PROCEDURE [dbo].[PROC_CheckCashDouble]  /***需要传递的参数**/@cmdfiled1 varchar(50),@cmdfiled2 varchar(50),@tablename varchar(50)
ASdeclare @TempSql varchar(500)BEGINSET @TempSql= 'select * from '+@tablename+' where DateTime between '+@cmdfiled1+' and '+@cmdfiled2 execute(@TempSql)
end

后来,我就想如果能将穿过来的参数加工一下,让数据库只能把它当做字符串处理就可以了,所以,我就想在这两个字符串类型的日期两遍分别加上单引号,这样就绝对不会出问题了,所以就大胆做了尝试!

ALTER PROCEDURE [dbo].[PROC_CheckCashDouble]  /***需要传递的参数**/@cmdfiled1 varchar(50),@cmdfiled2 varchar(50),@tablename varchar(50)ASdeclare @TempSql varchar(500)declare @smb char(2)
BEGINSet @smb =''''set @cmdfiled1 =@smb+@cmdfiled1+@smbset @cmdfiled2 =@smb+@cmdfiled2+@smbSET @TempSql= 'select * from '+@tablename+' where DateTime between '+@cmdfiled1+' and '+@cmdfiled2print @TempSqlexecute(@TempSql)
end

最终的结果:

在声明单引号时:注意

Set @smb ='''
--不能这样写,或许你会说,字符串不是要用单引号括起来吗?前后各需要一个单引号就可以,为什么要加两个
--答:
---:1.就近匹配,这样想会认为前两个单引号刚好一对,多出来的单引号就会报错
---:2.所以没有办法只加一个单引号
---:3.所以,我就用前后放了一对单引号
---:4.这样,内层的两个单引号将值转换为字符型
---:5.外层,外层用来标识里面的内容为字符串

解决:sql中将日期字符串当做日期类型处理相关推荐

  1. python中日期字符串与datetime类型的相互转换

    文章目录 背景 代码 1. `datetime`如何转换成日期字符串 2. 日期字符串如何转换成`datetime` 背景 我们在平常写代码的过程中最常遇到的就是形如2021-05-12,2021/0 ...

  2. Python日期字符串到日期对象

    本文翻译自:Python date string to date object How do I convert a string to a date object in python? 如何在pyt ...

  3. es6 日期字符串转日期_小数转成百分数,日期字符串互相转换,这几个SQL问题该如何解决?...

    点击上方SQL数据库开发,关注获取SQL视频教程 SQL专栏 SQL数据库基础知识汇总 SQL数据库高级知识汇总 SQL在使用过程中,经常会遇到一些奇奇怪怪的小问题,今天给大家总结一下常见的几个问题该 ...

  4. SQL中将时间戳转为格式化日期后进行比较日期的方法

    最近同事用到了这类sql,记录如下: 1.首先,数据库表userinfo中,有一个updatetime字段,该字段的格式是bigint(最大长度20),保存的是13位的时间戳,例如: updateti ...

  5. es6 日期字符串转日期_Pandas核心能力9:日期时间转换、提取、筛选

    Pandas核心能力9:日期时间转换.提取.筛选 In [1]: import numpy as npimport pandas as pddatetime_index = pd.date_range ...

  6. js 常用日期字符串和日期转换

    在前端开发时,我们经常需要在 javascript 中对日期进行格式化,将其转换成固定格式的字符串:或者将指定格式的日期字符串,转换为日期进行处理.本文简单记录将日期格式(yyyy-MM-dd hh: ...

  7. 6 日期字符串转日期_日期居然用字符串保存?我笑了

    我发现数据库有些日期居然用字符串保存?于是跟几个小伙伴讨论了关于数据库的日期应该要怎么保存的问题,其实我一直都建议直接用数值保存时间戳,为什么我要这么建议呢? 以下,我会从时区的概念来跟你们解释一下, ...

  8. es6 日期字符串转日期_【R语言新书】1.4 数据结构Ⅲ:字符串、日期时间

    张敬信:我的R语言新书信息汇总​zhuanlan.zhihu.com 1.4.1 字符串 字符串是用双引号或单引号括起来的若干字符,建议用双引号,除非字符串中包含双引号.字符串构成的向量,简称为字符向 ...

  9. sql中将分隔字符串转为临时表的方法

    问题: 要求将 一字符串 0,1,2,3,4,5 :将,分隔后的每一内容转为一行记录到数据库表中 declare  @table_串转数组 table( adapt_object int defaul ...

最新文章

  1. 姜子上:利用BiLSTM-CRF进行命名实体识别
  2. DFiddler:A HTTP Packets Listener一个简易版的手机端的Fiddler。
  3. 删库不跑路,MySQL 数据库恢复教程
  4. ffmpeg libx264_编程小短文:FFmpeg视频画面尺寸调整,必知必会
  5. linux开发亿连手机互联,亿连手机互联车载版下载-亿连手机互联车机版v6.6.1 安卓版-腾牛安卓网...
  6. 简单理解机器学习中的L1距离,L2距离,L-Inf距离
  7. 20. Prefer pass-by-reference-to-const to pass-by-value
  8. 破解大众点评 css加密
  9. Shiro源码分析(二)——获取Subject
  10. 万恶的BOM,万恶的微软
  11. (31)Java基础语法 --接口
  12. [深入研究4G/5G/6G专题-56]: L3信令控制-5-无线承载DRB管理
  13. 【游戏开发小技】Unity中实现Dota里的角色技能地面贴花效果(URP ShaderGraph Decal)
  14. 华为手机在线将语音转换文字的办公黑科技便签,轻松提高你的工作效率
  15. 解决方案 因为计算机同名,无法发现工作组内其他计算机。
  16. (转)对话架构师:短视频社区“美拍”的架构实战
  17. 帆软数据决策平台连接SAP RFC实例
  18. python库--jieba(中文分词)
  19. bandzip和360解压_最优秀的压缩/解压缩软件—BandZip
  20. 自动同步vps服务器或本地文件的数据到百度网盘

热门文章

  1. 你听说过反摩尔定律吗?
  2. 2022-2028年中国金属薄膜行业市场深度监测及投资潜力研究报告
  3. MySQL中对varchar类型排序问题的解决
  4. 超详细中文预训练模型ERNIE使用指南-源码
  5. 命名实体识别NER遗留问题----模型构建
  6. LeetCode简单题之检查单词是否为句中其他单词的前缀
  7. 如何在GPU上优化卷积
  8. Turing渲染着色器网格技术分析
  9. Json文件解析(下
  10. 摄像头Camera标定Calibration原理Theory