2015-11-27 6 views
0

У меня есть этот метод здесь:ASP.NET не удается вставить пустой DateTime в базу данных

public List<CustomerQuestionsClass> updateCustomersQuestions(List<CustomerQuestionsClass> items) 
{ 
    connection = new SqlConnection(connectionString); 
    command = new SqlCommand(@"IF EXISTS(SELECT * FROM CustomerQuestions WHERE CustomerID = @CustomerID AND QuestionID = @QuestionID) 
           BEGIN 
            UPDATE CustomerQuestions SET selected = @Selected, ModifiedBy = @ModifiedBy, DateModified = @DateModified WHERE CustomerID = @CustomerID AND QuestionID = @QuestionID 
           END 
           ELSE 
           BEGIN 
            INSERT INTO CustomerQuestions (CustomerID, QuestionID, selected, CreatedBy, 
             DateCreated, ModifiedBy, DateModified, DateCompleted, DueDate) 
            VALUES (@CustomerID, @QuestionID, @Selected, @CreatedBy, @DateCreated, 
             @ModifiedBy, @DateModified, @DateCompleted, @DueDate) 
           END"); 

    command.Parameters.Add("@CustomerID", System.Data.SqlDbType.Int); 
    command.Parameters.Add("@QuestionID", System.Data.SqlDbType.Int); 
    command.Parameters.Add("@Selected", System.Data.SqlDbType.Bit); 
    command.Parameters.Add("@CreatedBy", System.Data.SqlDbType.Text); 
    command.Parameters.Add("@DateCreated", System.Data.SqlDbType.DateTime); 
    command.Parameters.Add("@ModifiedBy", System.Data.SqlDbType.Text); 
    command.Parameters.Add("@DateModified", System.Data.SqlDbType.DateTime); 
    command.Parameters.Add("@DateCompleted", System.Data.SqlDbType.DateTime); 
    command.Parameters.Add("@DueDate", System.Data.SqlDbType.DateTime); 

    command.Connection = connection; 
    connection.Open(); 

    for (int i = 0; i < items.Count; i++) 
    { 
     command.Parameters["@CustomerID"].Value = items[i].CustomerID; 
     command.Parameters["@QuestionID"].Value = items[i].QuestionID; 
     command.Parameters["@Selected"].Value = items[i].selected; 
     command.Parameters["@CreatedBy"].Value = items[i].Username; 
     command.Parameters["@DateCreated"].Value = DateTime.Now; 
     command.Parameters["@ModifiedBy"].Value = items[i].Username; 
     command.Parameters["@DateModified"].Value = DateTime.Now; 
     command.Parameters["@DateCompleted"].Value = items[i].DateCompleted.Equals(DateTime.MinValue) ? (DateTime?)null : items[i].DateCompleted; 
     command.Parameters["@DueDate"].Value = items[i].DueDate.Equals(DateTime.MinValue) ? (DateTime?)null : items[i].DueDate; 
     command.ExecuteNonQuery(); 
    } 

    connection.Close(); 

    return items; 

} 

Он пытается сделать вставку. Но я получаю эту ошибку:

The parameterized query '(@CustomerID int,@QuestionID int,@Selected bit,@CreatedBy text,@' expects the parameter '@DateCompleted', which was not supplied.

Когда я удалить все, что связанно с DateCompleted прогонами запроса и получают данные вставленными, но с DateCompleted он не работает, и я получаю ошибку выше. Значение для DateCompleted равно null.

+0

просто передайте 'DBNull.Value' – MethodMan

ответ

6

Вы должны явно передать DBNull.Value в качестве значения параметра, а не null:

command.Parameters["@DateCompleted"].Value = 
     items[i].DateCompleted.Equals(DateTime.MinValue) ? (object)DBNull.Value : items[i].DateCompleted; 

Актерский к object необходимо, чтобы тип выражения может быть решена.

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