2015-01-26 2 views
3

У меня есть два DateTimePicker на моей форме dtp_VacationStart и dtp_VacationEnd. Я хотел бы передать его значение хранимой процедурыPass DateTimePicker Значение хранимой процедуры

Мой 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); 
} 

Этот код дает мне Ошибка: строка ввода не была в правильном формате.

Спасибо за вас все ... К сожалению о путаете .. его мой первый вопрос

+0

Как вы получаете дату? Из textBox или dateTimePicker? Если его dateTimePicker, вы должны использовать '.Value' вместо' .Text'. Если его textBox, то вы должны использовать [ParseExact Method] (https://msdn.microsoft.com/en-us/library/w2sa9yss (v = vs.110) .aspx). – Bhaskar

+0

Дата с dateTimePicker ... я пытался использовать значение, но он дает мне ошибку Argument2: невозможно преобразовать из 'System.DateTime' в 'String' –

ответ

3

Ваш SqlParameter@vacationStart имеет тип DateTime но присвоить ему строку.

Вы должны получить значение DateTime в DateTimePicker (вместо строки представление в DateTimePicker.Text):

DateTime vacationStart = dtp_VacationStart.Value; 

и изменить подпись ADD_VACATION:

public void ADD_VACATION(DateTime vacationStart, ... 

Теперь вы можете использовать:

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

Где я должен поставить DateTime vacationStart = dtp_VacationStart.Value; ? –

+0

см. Мой обновленный ответ – DrKoch

+0

еще одна ошибка Строка ввода не была в правильном формате. –

2

Я думаю, что вы вводите данные в неправильном формате ...
входных данных в нужном формате или изменить тип данных

+0

Я согласен с тобой, но ошибка говорит о том же, что и ... Это не ответ –

1

Вы должны преобразовать dtp_VationStart.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. Дополнительная информация может быть here.

+2

Это включает в себя две конверсии DateTime-> Text-> DateTime со всеми возможными ошибками формата. Не то, что хочет OP ... – DrKoch

+0

ошибка Аргумент 1: невозможно преобразовать из 'System.DateTime' в 'String' –

1

Аргументы функции ADD_VACATION()vacationStart & vacationEnd имеют тип string, в то время как вы передаете их в качестве параметров SqlDbType.Date. Измените тип аргументов DateTime и в вызывающей функции ADD_VACATION(), используйте .Value для DateTimePicker Управление. Это должно решить вашу проблему.

Смежные вопросы