如何修复在asp.net中将参数值从String转换为DateTime失败?

时间:2017-03-22 04:34:34

标签: c# jquery asp.net datetime calendar

我想将表单中的所有数据插入名为Equipment的数据库中。 但是,当我单击保存按钮时,它显示错误“无法将参数值从字符串转换为日期时间。”

我在日期时间类型中设置了某个列的数据类型。我将日历放在文本框中,因此通过单击文本框,它将弹出日历。用户可以选择日期。使用javascript创建的日历。

任何人都知道如何解决这个问题?

The form and the calendar pop up

保存按钮的代码:

A3

javacript代码:

string connectionstring = "Data Source=5CG50749V3\\SQLEXPRESS;Initial Catalog=test;Integrated Security=True";
    using (SqlConnection connection = new SqlConnection(connectionstring))
    {

        string sql = @"INSERT Into [Equipment]([OwnerID],[SubjecttoCal],[Model],[Option],[EquipmentID],[SerialNumber],[Description],[Location],
                            [DueDate],[EquipmentWithdraworRemarks],[NCRorOOTHistory],[LastOOTissuanceDate],
                            [AvailableinSapphire],[ResponsiblePerson],[CalibrationOption],[CalibrationSourceorLab],
                            [YearofManufacturing],[ManufacturerorVendor],[CalibrationCost],[AssetNo],[CalibrationTAT],[SendInDate],[Status])
                           ";

        using (SqlCommand command = new SqlCommand(sql, connection))
        {
            command.Parameters.Add("@OwnerID", SqlDbType.NVarChar).Value = TextBox1.Text;
            command.Parameters.Add("@SubjecttoCal", SqlDbType.NVarChar).Value = TextBox2.Text;
            command.Parameters.Add("@Model", SqlDbType.NVarChar).Value = TextBox3.Text;
            command.Parameters.Add("@Option", SqlDbType.NVarChar).Value = TextBox4.Text;
            command.Parameters.Add("@EquipmentID", SqlDbType.NVarChar).Value = TextBox5.Text;
            command.Parameters.Add("@SerialNumber", SqlDbType.NVarChar).Value = TextBox6.Text;
            command.Parameters.Add("@Description", SqlDbType.NVarChar).Value = TextBox7.Text;
            command.Parameters.Add("@Location", SqlDbType.NVarChar).Value = DropDownList1.Text;
            command.Parameters.Add("@DueDate", SqlDbType.DateTime).Value = TextBox8.Text;
            command.Parameters.Add("@EquipmentWithdraworRemarks", SqlDbType.NVarChar).Value = TextBox10.Text;
            command.Parameters.Add("@NCRorOOTHistory", SqlDbType.NVarChar).Value = TextBox11.Text;
            command.Parameters.Add("@LastOOTissuanceDate", SqlDbType.DateTime).Value = TextBox12.Text;

            command.Parameters.Add("@AvailableinSapphire", SqlDbType.NVarChar).Value = TextBox13.Text;
            command.Parameters.Add("@ResponsiblePerson", SqlDbType.NVarChar).Value = TextBox14.Text;
            command.Parameters.Add("@CalibrationOption", SqlDbType.NVarChar).Value = TextBox15.Text;
            command.Parameters.Add("@CalibrationSourceorLab", SqlDbType.NVarChar).Value = TextBox16.Text;

            command.Parameters.Add("@YearofManufacturing", SqlDbType.NVarChar).Value = TextBox17.Text;
            command.Parameters.Add("@ManufacturerorVendor", SqlDbType.NVarChar).Value = TextBox18.Text;
            command.Parameters.Add("@CalibrationCost", SqlDbType.NVarChar).Value = TextBox19.Text;
            command.Parameters.Add("@AssetNo", SqlDbType.NVarChar).Value = TextBox20.Text;

            command.Parameters.Add("@CalibrationTAT", SqlDbType.NVarChar).Value = TextBox21.Text;
            command.Parameters.Add("@SendInDate", SqlDbType.DateTime).Value = TextBox22.Text;
            command.Parameters.Add("@Status", SqlDbType.NVarChar).Value = DropDownList2.Text;

            connection.Open();
            command.ExecuteNonQuery();
            connection.Close();
        }

        {
            this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Your data have been saved')", true);



        }
    }

2 个答案:

答案 0 :(得分:0)

您需要将日期字符串转换为日期时间格式。例如:

DateTime oDate = DateTime.ParseExact(textboxValue, "MM/dd/yy", null);

//For eg
command.Parameters.Add("@DueDate", SqlDbType.DateTime).Value = DateTime.ParseExact(TextBox8.Text, "MM/dd/yy", null);

顺便说一下,我假设TextBox8.Text从日期时间选择器返回正确的值。

如果它有效,那么就和其他日期时间文本框做同样的事情

答案 1 :(得分:0)

在查看您的代码时,您将从文本框中的客户端以“dd / MM / yyyy”格式获取日期。 因此,您需要通过以下代码段来解析考虑该格式的日期。

DateTime parsedDate = DateTime.ParseExact("22/3/2017", "dd/MM/yyyy", CultureInfo.InvariantCulture);

对于您的代码,您需要将“textbox.Text”替换为语句“DateTime.ParseExact(textbox.Text,”dd / MM / yyyy“,CultureInfo.InvariantCulture)”,无论您提到数据类型DateTime。

        command.Parameters.Add("@DueDate", SqlDbType.DateTime).Value = DateTime.ParseExact(TextBox8.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);

        command.Parameters.Add("@LastOOTissuanceDate", SqlDbType.DateTime).Value = DateTime.ParseExact(TextBox12.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);

        command.Parameters.Add("@SendInDate", SqlDbType.DateTime).Value = DateTime.ParseExact(TextBox22.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);