C# 将dateTImePicker值转换为字符串

C# 将dateTImePicker值转换为字符串,c#,.net,sql,string,C#,.net,Sql,String,我正在使用dateTimePicker以windows窗体的形式从用户处收集日期,以插入SQL Server数据库,但当我调试它时,它会显示“Cannt convert dateTime to string”,下面是代码 string Agent = FieldAgentCombo.Text; string Query = "INSERT INTO Comittment(Date,Field_Staff_Date,Detail,Priority,company_name,

我正在使用dateTimePicker以windows窗体的形式从用户处收集日期,以插入SQL Server数据库,但当我调试它时,它会显示“Cannt convert dateTime to string”,下面是代码

string Agent = FieldAgentCombo.Text;
            string Query = "INSERT INTO Comittment(Date,Field_Staff_Date,Detail,Priority,company_name,Name) values('" + Client + "','" + Agent + "','" + Date + "','" + FieldStaffDate + "','" + Detail + "','" + Priority + "')";

            SqlCommand cmd = new SqlCommand(Query, conn);

            int status = cmd.ExecuteNonQuery();
            if (status > 0)
                MessageBox.Show("record inserted");

如果要将当前日期插入sql,而不是进行转换,只需直接将
now()
添加到查询中即可

除此之外,请检查此链接:


如果要将当前日期插入sql,而不是进行转换,只需直接将
now()
添加到查询中即可

除此之外,请检查此链接:


您的代码易受攻击。我建议您使用参数化查询。此外,在SQL查询中,您似乎混合了参数。确保它们匹配。例如:

// load the values that you want to insert into standard .NET types
DateTime date = ...
DateTime fieldStaffDate = ...
string detail = ...
string priority = ...
string companyName = ...
string name = ...

// now connect to the database to execute the SQL query
using (var conn = new SqlConnection(ConnectionString))
using (var cmd = conn.CreateCommand())
{
    conn.Open();
    cmd.CommandText = 
    @"INSERT INTO Comittment(
          Date, 
          Field_Staff_Date, 
          Detail, 
          Priority, 
          company_name, 
          Name) 
      VALUES (
          @Date, 
          @Field_Staff_Date, 
          @Detail, 
          @Priority, 
          @company_name, 
          @name)";

    cmd.Parameters.AddWithValue("@Date", date);
    cmd.Parameters.AddWithValue("@Field_Staff_Date", fieldStaffDate);
    cmd.Parameters.AddWithValue("@Detail", detail);
    cmd.Parameters.AddWithValue("@Priority", priority);
    cmd.Parameters.AddWithValue("@company_name", companyName);
    cmd.Parameters.AddWithValue("@name", name);

    cmd.ExecuteNonQuery();
}

这样,查询就不再容易受到SQL注入的攻击,此外,ADO.NET将负责将.NET类型正确格式化为相应的SQL类型,这样您就不需要进行任何字符串解析和日期操作。

您的代码容易受到SQL注入的攻击。我建议您使用参数化查询。此外,在SQL查询中,您似乎混合了参数。确保它们匹配。例如:

// load the values that you want to insert into standard .NET types
DateTime date = ...
DateTime fieldStaffDate = ...
string detail = ...
string priority = ...
string companyName = ...
string name = ...

// now connect to the database to execute the SQL query
using (var conn = new SqlConnection(ConnectionString))
using (var cmd = conn.CreateCommand())
{
    conn.Open();
    cmd.CommandText = 
    @"INSERT INTO Comittment(
          Date, 
          Field_Staff_Date, 
          Detail, 
          Priority, 
          company_name, 
          Name) 
      VALUES (
          @Date, 
          @Field_Staff_Date, 
          @Detail, 
          @Priority, 
          @company_name, 
          @name)";

    cmd.Parameters.AddWithValue("@Date", date);
    cmd.Parameters.AddWithValue("@Field_Staff_Date", fieldStaffDate);
    cmd.Parameters.AddWithValue("@Detail", detail);
    cmd.Parameters.AddWithValue("@Priority", priority);
    cmd.Parameters.AddWithValue("@company_name", companyName);
    cmd.Parameters.AddWithValue("@name", name);

    cmd.ExecuteNonQuery();
}

这样,查询就不再容易受到SQL注入的攻击,此外,ADO.NET将负责将.NET类型正确格式化为相应的SQL类型,这样您就不需要进行任何字符串解析和日期操作。

看起来您的字段顺序不对。。。第一个字段是Date,第一个值命名为Client。datetime是Date的数据库列吗?然后检查在查询中输入的表列和值的顺序…如果datetime的数据库列是date,则将date分配给datetime类型;如果是string,则将datetime值转换为string分配给字符串变量。看起来字段的顺序不正确。。。第一个字段是Date,第一个值命名为Client。datetime是Date的数据库列吗?然后检查在查询中输入的表列和值的顺序…如果datetime的数据库列是date,则将date分配给datetime类型;如果是string,则将datetime值转换为string分配给字符串变量。