winform三层架构调用存储过程按日期查询数据显示在DataGridView

问题描述
我有一个textBox1可以输入姓名或者电话一个包含日期复选框checkbox1 2 个 dateTimePicker 控件(dtpStart 和 dtpEnd)、按钮Search 一个comboBox1内有3个参数一个 datagridview

我想将用户在快速搜索框内输入姓名或者电话点击搜索 或者用户点击日期复选框checkbox1选择日期后将dateTimePicker 控件中的两个 date 参数传递给存储过程,以便在我的 datagridview 上返回所需的范围.

我的存储过程如下所示
ALTER PROCEDURE [dbo].[pHis_DoctorBaEndList]
(
@szBegin varchar(50),
@szEnd varchar(50),
@szZt varchar(50),
@szCond varchar(50)

)

AS
declare @szCyDateTj varchar(200)
declare @szCondTj varchar(1000)

declare    @szSql    varchar(8000)

declare    @szZtTj    varchar(200)


if (@szBegin='') or (@szBegin='')
    select @szCyDateTj=''
else        
    select @szCyDateTj=' and 入驻时间>='''+@szBegin+''' and 入驻时间<='''+@szEnd+''' '
select @szCond='%'+@szCond+'%'
select @szCondTj=' and (姓名 like '''+@szCond+''' or 电话 like '''+@szCond+''')'
if @szZt='所有'
    select @szZtTj=''
else 
    select @szZtTj=' and BaType='''+@szZt+''' '
        
select @szSql=' select ZYH,* from (select ZYH,''男'' as BaType from SC_WFP where EndType=''完成提交'' '+
              ' union all select ZYH,''女'' as BaType from SC_CFP where EndType=''完成提交'' '+
              ' union all select BAH as ZYH,''基层'' as BaType from N0_1 where EndType=''完成提交'' '+
              ' ) B,PersonInfo Z where B.ZYH=Z.zy_bm '+
              ' '+@szCyDateTj+@szCondTj+@szZtTj+' order by ZYH '

print @szSql
exec(@szSql)

我使用winform搭建的三层框架框架

img

这个和几层架构无关,代码能返回DataSet,DataTable吗? 如果不能,可以参考一下下面的代码自行调整一下


```c#
        public DataSet ExecuteProcedureDs(string StoredProcedureName, SqlParameter[] paraArray)
        {
            SqlConnection sqlConnection = (SqlConnection)this.OpenDbConnection();
            try
            {
                SqlCommand sqlCommand = new SqlCommand();
                sqlCommand.Connection = sqlConnection;
                sqlCommand.CommandType = CommandType.StoredProcedure; //存储过程类型
                sqlCommand.CommandText = StoredProcedureName;
                sqlCommand.CommandTimeout = base.SqlExcueteTimeOut;
                if (paraArray != null)
                {
                    for (int iLoop = 0; iLoop < paraArray.Length; iLoop++)
                    {
                        sqlCommand.Parameters.Add(paraArray[iLoop]);
                    }
                }
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
                DataSet ds = new DataSet();
                sqlDataAdapter.Fill(ds);
                return ds;
            }
            catch (Exception xe)
            {
                throw new Exception(xe.Message);
            }
            finally
            {
                this.CloseDbConnection(sqlConnection);
            }
        }

```

得到DataSet或DataTable后,this.Grid控件.DataSource=DataSet或DataTable对象即可。