将 nvarchar 数据类型转换为 datetime 数据类型导致值超出范围。3

The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.3

谁能帮我弄清楚为什么会出现此错误?我的 PC 上有相同的代码并且运行良好,但在我朋友的笔记本电脑上却无法运行。我们有相同的 SQL 服务器日期时间格式。我已经尝试将字符串日期格式转换为与 SQL 服务器日期格式相同的格式,但它仍然不起作用。

编辑:糟糕,我发布了错误的代码。

        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;
        }

您正在尝试将 string(nvarchar) 更新为日期时间列。 变化:

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

收件人:

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

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

Introduction to the Windows Forms DateTimePicker Control