我在这里有这个方法:
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;
}
它试图插入。但我一直收到这个错误:
参数化查询&#39;(@ CustomerID int,@ QuestionID int,@ Selected bit,@ CreatedBy text,@&#39;需要参数&#39; @ DateCompleted&#39;,这是未提供的。
当我删除与DateCompleted
有关的所有内容时,查询运行并插入数据,但是DateCompleted
它不起作用,我得到上面的错误。 DateCompleted
的值为null。
答案 0 :(得分:6)
您必须明确传递DBNull.Value
作为参数值,而不是null
:
command.Parameters["@DateCompleted"].Value =
items[i].DateCompleted.Equals(DateTime.MinValue) ? (object)DBNull.Value : items[i].DateCompleted;
需要转换为object
,以便可以解析表达式的类型。