簡體   English   中英

將C#datetime發送到SQL Server-錯誤“從字符串轉換日期和/或時間時轉換失敗”

[英]Send C# datetime to SQL Server - error “Conversion failed when converting date and/or time from character string”

我正在嘗試提交包含一些datetimepickers以及其他控件的表單。 其他控件沒有問題,但是當我將datetimepicker日期值放入參數化的insert語句中時,會發生此錯誤:

從字符串轉換日期和/或時間時轉換失敗

我嘗試了以下方法:

  1. 自定義日期時間格式:

     dateTimePicker1.Format = DateTimePickerFormat.Custom; dateTimePicker1.CustomFormat = "dd/MM/yyyy";' 
  2. 使用datetime.parseexact,datetime.parse和Convert.ToDateTime將其轉換為字符串,然后轉換為日期時間。

  3. 也嘗試過這種類型的代碼:

     DateTime date2 = Convert.ToDateTime(dateTimePicker2.Text); 

完整代碼

con.Open();

string s = "insert into [NutritionClinicDatabase].[dbo].[PatientInformation] values(@NIC, @ClinicNo, @PatientCategory, @Date, @Name, @Gender, @DOB, @DateOfAdmission, @DateOfDischarge, @DurationOfVisit, @Age, @City, @Contact, @Height, @Weight, @UsualWweight, @ReferredUnit, @WC, @FatMass, @LeanBodyMass, @HandGripStrength, @Intake, @Illness, @Illness2, @Illness3, @Illness4, @Specify, @Other)";


cmd = new SqlCommand(s, con);
String strDateFormat = "yyyy-MM-dd";
cmd.Parameters.AddWithValue("@NIC", NIC);
cmd.Parameters.AddWithValue("@ClinicNo", ClinicNo);
cmd.Parameters.AddWithValue("@PatientCategory", PatientCategory);

if (PatientCategory == "Clinic Patient")
{
    cmd.Parameters.AddWithValue("@Date", SqlDbType.Date).Value = dateTimePicker1.Value.Date;
}
else if ((PatientCategory == "In-Ward Patient") || (PatientCategory == "ICU Patient"))
{
    cmd.Parameters.AddWithValue("@Date", DBNull.Value);
}

cmd.Parameters.AddWithValue("@Name", Name1);
cmd.Parameters.AddWithValue("@Gender", Gender);

//if (dateTimePicker2.CustomFormat == " ")
//    cmd.Parameters.AddWithValue("@DOB", DBNull.Value);
//else
cmd.Parameters.AddWithValue("@DOB", SqlDbType.Date).Value = dateTimePicker2.Value.Date;
// cmd.Parameters.AddWithValue("@DOB", SqlDbType.Date).Value = dateTimePicker2.Value.Date;

if ((PatientCategory == "In-Ward Patient") || (PatientCategory == "ICU Patient"))
{
    //if (dateTimePicker3.CustomFormat == " ")
    //    cmd.Parameters.AddWithValue("@DateOfAdmission", DBNull.Value);
    //else
    cmd.Parameters.AddWithValue("@DateOfAdmission", SqlDbType.Date).Value = dateTimePicker3.Value.Date;
    // cmd.Parameters.AddWithValue("@DOB", SqlDbType.Date).Value = dateTimePicker2.Value.Date;
    //if (dateTimePicker4.CustomFormat == " ")
    //    cmd.Parameters.AddWithValue("@DateOfDischarge", DBNull.Value);
    //else
    cmd.Parameters.AddWithValue("@DateOfDischarge", SqlDbType.Date).Value = dateTimePicker4.Value.Date;
    //cmd.Parameters.AddWithValue("@DateOfDischarge", DateTime.Parse(dateTimePicker4.Value.Date.ToString()));
    // cmd.Parameters.AddWithValue("@DOB", SqlDbType.Date).Value = dateTimePicker2.Value.Date;

    cmd.Parameters.AddWithValue("@DurationOfVisit", Duration);
}
else if (PatientCategory == "Clinic Patient")
{
    cmd.Parameters.AddWithValue("@DateOfAdmission", DBNull.Value);
    cmd.Parameters.AddWithValue("@DateOfDischarge", DBNull.Value);
    cmd.Parameters.AddWithValue("@DurationOfVisit", "Not Specified");
}

cmd.Parameters.AddWithValue("@Age", Age);
cmd.Parameters.AddWithValue("@City", City);
cmd.Parameters.AddWithValue("@Contact", Contact);
cmd.Parameters.AddWithValue("@Height", Height1);
cmd.Parameters.AddWithValue("@Weight", Weight);
cmd.Parameters.AddWithValue("@UsualWweight", UsualWeight);
//cmd.Parameters.AddWithValue("@CurrentWeight", CurrentWeight);
cmd.Parameters.AddWithValue("@ReferredUnit", ReferredUnit);
cmd.Parameters.AddWithValue("@WC", WC);
cmd.Parameters.AddWithValue("@FatMass", FatMass);
cmd.Parameters.AddWithValue("@LeanBodyMass", LeanBodyMass);
cmd.Parameters.AddWithValue("@HandGripStrength", HandGripStrength);
cmd.Parameters.AddWithValue("@Intake", Intake);
cmd.Parameters.AddWithValue("@Illness", Illness);
cmd.Parameters.AddWithValue("@Illness2", Illness2);
cmd.Parameters.AddWithValue("@Illness3", Illness3);
cmd.Parameters.AddWithValue("@Illness4", Illness4);
cmd.Parameters.AddWithValue("@Specify", Specify);
cmd.Parameters.AddWithValue("@Other", Other);

cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();

con.Close();

MessageBox.Show("Patient Registered");

您沒有正確使用AddWithValue AddWithValue方法采用參數名稱和對象,該對象是參數值,而不是類型。 我建議您完全避免使用AddWithValue ,而應使用Add方法,例如:

cmd.Parameters.Add("@Date", SqlDbType.Date).Value = dateTimePicker1.Value.Date;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM