C# 使用组合框和文本框显示出生日期

C# 使用组合框和文本框显示出生日期,c#,C#,我组合了两个文本框和两个文本框。不知道如何将字符串转换为datetime string DOb = $"{comboMM.SelectedValue}, {ComboDD.SelectedValue}, {txtYear.Text""; string Query = "Insert into dbo.membertable(Given_Names, Last_Name, passport_No, Ctry_Origin, gender, M_status, DOb,MarAnn, Phone_

我组合了两个文本框和两个文本框。不知道如何将字符串转换为datetime

string DOb  = $"{comboMM.SelectedValue}, {ComboDD.SelectedValue}, {txtYear.Text"";
string Query = "Insert into dbo.membertable(Given_Names, Last_Name, passport_No, Ctry_Origin, gender, M_status, DOb,MarAnn, Phone_No,Email,branch,Unit,H_address,city,states,Country,famdfrd_Name,famfrd_Number,famfrd_rship) Values('" + txtnames.Text + "','" + txtFamilyname.Text + "','" + txtPassport.Text + "','" + txtCountry.Text + "','" + ComboGender.SelectedItem + "','" + ComboMStatus.SelectedItem + "','" + DateB.Value.ToShortDateString() + "','" +  MarAnn + "','" + txtPhoneNo.Text + "','" + txtEmailAdd.Text + "','" + ComboBranch.SelectedItem + "','" + ComboUnit.SelectedItem + "','" + txtAddress.Text + "','" + txtCity.Text + "','" + ComboState.SelectedItem + "','" + ComboCountry.SelectedItem + "','" + txtrelative.Text + "','" + TxtRphone.Text + "','" + txtRelationship.Text + "');";

ConnectionStringSettings conSettings = ConfigurationManager.ConnectionStrings["PottersDB"];
String connectionString = conSettings.ConnectionString;
try
{

    con = new SqlConnection(connectionString);
    con.Open();
    cmd = new SqlCommand(Query, con);
    dr  = cmd.ExecuteReader();
    MessageBox.Show("Member Successfully Added");
    Reset_Page();
    con.Close();
}

简单的答案是使用日期选择器。这就是他们在那里的目的,这是用户期望的,它为您验证输入,它给您一个日期时间,而不是您必须转换的字符串


还有更多,但应该足够了

正如注释中所建议的,在查询中使用参数将简化代码

有关示例,请参见下面的代码。我添加了一些额外的注释,以建议对您提供的代码进行改进

// Create a DateTime object from your controls, instead of a string representation.
var year = int.Parse(txtYear.Text);
var month = int.Parse(comboMM.SelectedValue);
var day = int.Parse(ComboDD.SelectedValue);
var dateOfBirth = new DateTime(year, month, day);

// Use parameters in your query instead of appending the string values
var query = "Insert into dbo.membertable(Given_Names, Last_Name, DOb, OtherFields) Values(@GivenNames, @LastName, @DOB, @OtherParameters);";

// Wrap your SqlConnection and SqlCommand in using blocks to ensure they are disposed correctly.
var connString = ConfigurationManager.ConnectionStrings["PottersDB"].ConnectionString;
using (var conn = new SqlConnection(connString))
{
    conn.Open();

    using (var cmd = new SqlCommand(query, conn))
    {
        cmd.Parameters.AddWithValue("@GivenNames", txtnames.Text);
        cmd.Parameters.AddWithValue("@LastName", txtFamilyname.Text);
        cmd.Parameters.AddWithValue("@DOB", dateOfBirth);

        // As the query is just inserting, there's no need to create a data reader.
        cmd.ExecuteNonQuery();
    }
}

同样正如Avrohom Ysroel所提到的,控件似乎更适合您的应用程序。它允许用户选择日期,您可以从对象的SelectedDate属性访问该日期。这将节省您为年度创建一个文本框和为日/月创建两个组合框的时间。

使用参数可避免sql注入和格式错误。您的意思是在sql或C中转换为DateTime?正如@LarsTech所说,请先参数化您的查询。您可以使用日期组件构造一个新的DateTime对象,并将其指定给相应的参数,也可以摆脱三个单独的控件,使用一个设计为直接接受日期的控件。在C语言中,我不知道如何计算。@Joe Farrell我想使用组合框和文本框,因为它更便于我设计应用程序。