将DateTimePicker值传递给存储过程

时间:2015-01-26 05:50:55

标签: c# winforms datetimepicker

我的表单DateTimePickerdtp_VacationStart上有两个dtp_VacationEnd。我想将其值传递给存储过程

我的SQL代码

CREATE PROC [ADD_VACATION]  @vacationStart date ,@vacationEnd date ,@vacationMem nvarchar (100) = NULL ,@idVacationKind_L int ,@idMember_L int

AS INSERT INTO [tblVacation]
           ([vacationStart]
           ,[vacationEnd]
           ,[vacationMem]
           ,[idVacationKind_L]
           ,[idMember_L])
     VALUES
           (@vacationStart
           ,@vacationEnd
           ,@vacationMem
           ,@idVacationKind_L
           ,@idMember_L)

C#代码:

public void ADD_VACATION(string vacationStart,string vacationEnd, string vacationMem, int idVacationKind_L, int idMember_L)
{

    DAL.open();

    SqlParameter[] param = new SqlParameter[5];

    param[0] = new SqlParameter("@vacationStart", SqlDbType.Date);
    param[0].Value = vacationStart;

    param[1] = new SqlParameter("@vacationEnd", SqlDbType.Date);
    param[1].Value = vacationEnd;

    param[2] = new SqlParameter("@vacationMem ", SqlDbType.NVarChar, 100);
    param[2].Value = vacationMem;

    param[3] = new SqlParameter("@idVacationKind_L", SqlDbType.Int);
    param[3].Value = idVacationKind_L;

    param[4] = new SqlParameter("@idMember_L", SqlDbType.Int);
    param[4].Value = idMember_L;

    DAL.ExecuteCommand("ADD_VACATION", param);
    DAL.close();

}

事件

private void btnAddVacation_Click(object sender, EventArgs e)
{

    cms.ADD_VACATION( dtp_VacationStart.Text, dtp_VacationEnd.Text, txtVacationMemory.Text,
                    Convert.ToInt32(cmbVacationKind.SelectedValue)
                   ,Convert.ToInt32(dgMember_Grade.CurrentRow.Cells[0].Value.ToString()));

    MessageBox.Show("Added Successfuly", " ", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

此代码给出了一个错误:输入字符串的格式不正确。

谢谢大家...抱歉让我感到困惑..这是我的第一个问题

4 个答案:

答案 0 :(得分:3)

您的SqlParameter @vacationStart类型为DateTime,但您为其指定了一个字符串。

您应该获得DateTime的{​​{1}}值(而不是DateTimePicker中的字符串表示形式):

DateTimePicker.Text

并更改DateTime vacationStart = dtp_VacationStart.Value; 的签名:

ADD_VACATION

现在你可以使用它了:

public void ADD_VACATION(DateTime vacationStart, ...

答案 1 :(得分:2)

我认为您输入的数据格式错误...
以正确的格式输入数据或更改数据类型

答案 2 :(得分:1)

您必须将dtp_VationStart.Text和dtp_VacationEnd.Text转换为Date。

cms.ADD_VACATION( Convert.ToDateTime(dtp_VacationStart.Text), Convert.ToDateTime(dtp_VacationEnd.Text), txtVacationMemory.Text,
                Convert.ToInt32(cmbVacationKind.SelectedValue)
               ,Convert.ToInt32(dgMember_Grade.CurrentRow.Cells[0].Value.ToString()));

您还可以使用DateTime.Parse函数。更多信息可以是here

答案 3 :(得分:1)

功能论证ADD_VACATION() vacationStart& vacationEnd类型为string,而您在参数SqlDbType.Date中传递它们。更改参数'输入为DateTime,在调用函数ADD_VACATION()中,使用.Value进行DateTimePicker控制。这应该可以解决你的问题。