【问题标题】:Error inserting date and time in SQL Server 2005 datetime c#? [closed]在 SQL Server 2005 datetime c# 中插入日期和时间时出错? [关闭]
【发布时间】:2013-04-10 08:55:57
【问题描述】:

保存到 SQL Server 2005 的问题:

cmd = new SqlCommand("INSERT into survey_Request1(sur_no,sur_custname,sur_address,sur_emp,sur_date,sur_time,Sur_status)values(" + "'" + textBox9.Text + "'" + "," + "'" + textBox8.Text + "'" + "," + "'" + textBox5.Text + "'" + "," + "'" + textBox1.Text + "'" + "," + "Convert(Datetime,Convert(char(15),"+"'" + dateTimePicker2.Value +"'"+")" + "," + "'" + dateTimePicker1.Value.ToLongTimeString() + "'" + "," + "'" + "Active" + "'" + ")", conn);
cmd.ExecuteNonQuery();

【问题讨论】:

  • 我认为您可能需要添加更多细节才能获得答案!
  • 你听说过little Bobby Tables吗?
  • 请阅读 FAQHow to Ask 几遍..
  • 请不要这样构建你的SQL语句!使用SqlParameters
  • 永远不要将这样的参数添加到代码中的查询中。使用 SqlParameters 防止 SQL 注入。

标签: c# sql sql-server-2005


【解决方案1】:

您应该始终使用参数化查询 - 这可以防止 SQL 注入攻击,提高性能,并避免将数据不必要地转换为字符串以将其插入数据库.

试试这样的:

// define your INSERT query as string *WITH PARAMETERS*
string insertStmt = "INSERT into survey_Request1(sur_no, sur_custname, sur_address, sur_emp, sur_date, sur_time, Sur_status) VALUES(@Surname, @SurCustName, @SurAddress, @SurEmp, @SurDate, @SurTime, @SurStatus)";

// put your connection and command into "using" blocks
using(SqlConnection conn = new SqlConnection("-your-connection-string-here-"))
using(SqlCommand cmd = new SqlCommand(insertStmt, conn))
{
    // define parameters and supply values
    cmd.Parameters.AddWithValue("@Surname", textBox9.Text.Trim());
    cmd.Parameters.AddWithValue("@SurCustName", textBox8.Text.Trim());
    cmd.Parameters.AddWithValue("@SurAddress", textBox5.Text.Trim());
    cmd.Parameters.AddWithValue("@SurEmp", textBox1.Text.Trim());
    cmd.Parameters.AddWithValue("@SurDate", dateTimePicker2.Value.Date);
    cmd.Parameters.AddWithValue("@SurTime", dateTimePicker2.Value.Time);
    cmd.Parameters.AddWithValue("@SurStatus", "Active");

    // open connection, execute query, close connection again
    conn.Open();
    int rowsAffected = cmd.ExecuteNonQuery();
    conn.Close();
}

建议为您的文本框命名 使用更具表现力的名称。 textbox9 并没有真正告诉我是哪个文本框 - textboxSurname好多更好!

【讨论】:

  • 谢谢你的建议 :) 我会练习这个方法。
  • 我仍然遇到同样的错误。从字符串转换数据时间时转换失败。
  • 您确定您正确复制了此代码吗?因为这里的任何datetime 字段中都没有插入character string
  • @user2276883:由于您没有发布任何表结构,我只需要根据您的代码猜测这些列的数据类型。你需要根据需要进行调整——我不知道你的数据库和代码是什么样的——你知道——所以你需要在需要的地方更改我的回复。
  • 我复制代码 :( 。对不起,我只是 sql 的初学者。我用于 surdate 的数据类型是 datetime 否则是 varchar 。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-17
  • 1970-01-01
  • 2011-11-17
相关资源
最近更新 更多