将nvarchar数据类型转换为日期时间数据类型会导致超出范围的值

时间:2017-07-18 17:08:20

标签: c# sql-server

有人可以帮我弄明白我收到此错误的原因吗?我在我的电脑上有相同的代码,它工作正常,但在我朋友的笔记本电脑上它不会工作。我们有相同的SQL Server日期时间格式。我已经尝试将字符串日期格式转换为与SQL Server日期格式相同,但它仍然无法正常工作。

编辑:我的错,我发错了代码。

        DateTime paymentCashDate = Convert.ToDateTime(txtPaymentCash.Text).AddDays(1).AddSeconds(-1);
        DateTime orderDate = Convert.ToDateTime(lblDate.Text);

        if (orderDate < paymentCashDate)
        {
            cmd.CommandText = "UPDATE Orders SET PaymentStatus=@PaymentStatus, Status=@Status, PaymentAmount=@PaymentAmount, PaymentDate=@PaymentDate WHERE OrderNo=@OrderNo AND Status='Pending'; " +
            "UPDATE OrderDetails SET Status=@Status WHERE OrderNo=@OrderNo AND Status='Pending';";
            cmd.Parameters.AddWithValue("@Status", "Approved");
            cmd.Parameters.AddWithValue("@PaymentStatus", "Payment Accepted");
            cmd.Parameters.AddWithValue("@PaymentDate", paymentCashDate.ToString());
            cmd.Parameters.AddWithValue("@PaymentAmount", txtAmountCash.Text);
            cmd.Parameters.AddWithValue("@OrderNo", orderNo);

            cmd.ExecuteNonQuery();
            con.Close();
            addProject(orderNo);
            Response.Redirect("Default.aspx");
        }
        else
        {
            errorPayment.Visible = true;
        }

1 个答案:

答案 0 :(得分:0)

您正尝试将stringnvarchar)更新为日期时间列。 改变:

cmd.Parameters.AddWithValue("@PaymentDate", paymentCashDate.ToString());

要:

cmd.Parameters.AddWithValue("@PaymentDate", paymentCashDate);

另一件事,我看到你正在使用TextBox控件来保存日期(确定,因为你将文本转换为DateTime),但我建议你使用DateTimePicker控制,它将节省铸造的需要,用户将有一个更好的用户体验。

Introduction to the Windows Forms DateTimePicker Control