C# 将DateTimePicker值传递给存储过程

C# 将DateTimePicker值传递给存储过程,c#,winforms,datetimepicker,C#,Winforms,Datetimepicker,我的表格上有两个DateTimePicker,分别是dtp\u VacationStart和dtp\u VacationEnd。我想把它的值传递给一个存储过程 我的SQL代码 CREATE PROC [ADD_VACATION] @vacationStart date ,@vacationEnd date ,@vacationMem nvarchar (100) = NULL ,@idVacationKind_L int ,@idMember_L int AS INSERT INTO [tb

我的表格上有两个
DateTimePicker
,分别是
dtp\u VacationStart
dtp\u 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#代码:

这件事呢

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);
}
这段代码给了我一个错误:输入字符串的格式不正确


谢谢大家。。。很抱歉搞混了。。这是我的第一个问题,您的
SqlParameter
@vacationStart
类型为
DateTime
,但您为其分配了一个字符串

您应该获得
DateTimePicker
DateTime
值(而不是
DateTimePicker.Text
中的字符串表示形式):

并更改
添加假期的签名

public void ADD_VACATION(DateTime vacationStart, ...
现在您可以使用它:

private void btnAddVacation_Click(object sender, EventArgs e)
{
    DateTime vacationStart = dtp_VacationStart.Value;
    cms.ADD_VACATION(vacationStart, ...

我认为您输入的数据格式错误…

以正确的格式输入数据或更改数据类型

您必须将dtp_VacationStart.Text和dtp_VacationEnd.Text转换为日期

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函数。可以查看更多信息。

函数的参数
ADD_VACATION()
vacationStart
&
vacationEnd
的类型为
字符串
,而您将它们作为
SqlDbType.Date
传递到参数中。将参数的类型更改为
DateTime
,并在调用函数
ADD_VACATION()
中,对
DateTimePicker
控件使用
.Value
。这应该可以解决您的问题。

这涉及两个转换DateTime->Text->DateTime以及所有可能的格式错误。不是OP想要的…错误参数1:无法从“System.DateTime”转换为“String”如何获取日期?从文本框还是日期时间选择器?如果是dateTimePicker,则必须使用
.Value
代替
.Text
。如果它是文本框,那么你必须使用。dateTimePicker的日期。。。我试图使用value,但它给了我一个错误Argument2:无法从'System.DateTime'转换为'String',我同意你的看法,但错误是说同样的事情。。。所以这不是一个答案,我应该把DateTime vacationStart=dtp_vacationStart.Value?另一个错误输入字符串的格式不正确。请使用调试器。错误发生在哪里?相应字符串的内容是什么?
private void btnAddVacation_Click(object sender, EventArgs e)
{
    DateTime vacationStart = dtp_VacationStart.Value;
    cms.ADD_VACATION(vacationStart, ...
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()));