将日期参数从C#WinForm传递到SQL存储过程

时间:2012-08-13 02:20:47

标签: c# sql-server winforms stored-procedures type-conversion

我的表单包含2个dateTimePicker控件(dtpStartdtpEnd),一个按钮和一个datagridview来显示结果。 datagridview绑定到bindingSource控件。

我想将date控件中的两个dateTimePicker参数传递给存储过程,以便在datagridview上返回所需的范围。

我的存储过程如下所示:

CREATE PROC [dbo].[ProcTest](@StartDate date, @EndDate date)
AS
SELECT * FROM Test WHERE ModifiedDate BETWEEN @StartDate AND @EndDate

我的C#代码是:

    private void button1_Click(object sender, EventArgs e)
    {
        dc = new NorthwindDataContext();

        var Qry = dc.ProcTest(dtpStart.Value, dtpEnd.Value);
        bindingSource1.DataSource = Qry;
    }

当我运行上面的代码时,我的数据网格上没有收到任何内容,dtpEnd.value显示:13/08/2012 02:15:29,我认为这是转换问题,因为我在存储时使用date类型过程和datetimepicker值是dateTime类型。

请问,如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

您需要检索查询结果,例如:

bindingSource1.DataSource = Qry.ToList();

我认为问题根本不在于Date参数。这得到了支持:

http://msdn.microsoft.com/en-us/library/bb386947.aspx

答案 1 :(得分:0)

而不是这个

var Qry = dc.ProcTest(dtpStart.Value, dtpEnd.Value);

使用此功能并检查问题是否得到解决。

var Qry = dc.ProcTest(dtpStart.ToString("dd-MMM-yyyy"), dtpEnd.ToString("dd-MMM-yyyy"));

答案 2 :(得分:0)

感谢Dave R.提供的链接:http://msdn.microsoft.com/en-us/library/bb386947.aspx}我发现我的代码无需任何修改即可运行。所以我首先通过从SP中删除参数来搜索错误,然后我发现我必须创建一个指向SP 结果的新数据源对象,并在设计时绑定它< / strong>到datagridview。现在数据网格显示数据和参数正在运行。

抱歉,伙计们,我在发布问题之前必须验证,但我对日期参数的使用感到非常困惑。

所以我保留了初始问题中的代码:

private void button1_Click(object sender, EventArgs e)
{
    dc = new NorthwindDataContext();

    var Qry = dc.ProcTest(dtpStart.Value, dtpEnd.Value);
    bindingSource1.DataSource = Qry;
}

答案 3 :(得分:-1)

我相信您需要发送日期,而不是日期时间选择器的值。

基本上,改变这一行:

var Qry = dc.ProcTest(dtpStart.Value, dtpEnd.Value);

阅读:

var Qry = dc.ProcTest(dtpStart.SelectedDate.Value, dtpEnd.SelectedDate.Value);

如果仍然无效,我会尝试:

var Qry = dc.ProcTest(dtpStart.SelectedDate.Value.Date, dtpEnd.SelectedDate.Value.Date);