【问题标题】:Insert Date into sql table with Date column将日期插入带有日期列的 sql 表中
【发布时间】:2014-03-11 12:56:40
【问题描述】:

您好,感谢您的阅读。

我正在尝试将当前日期插入到我的表格中,但我不知道如何正确写入。

这是我的 C# 代码:

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString);
conn.Open();

string Comment = UserWriteComment.Text;
string ID = DetailedID.Text;
string Name = DetailedName.Text;
string UniqueID = lblID.Text;


string query = "INSERT INTO Comment(TicketID, Name, Comments, UserID, Date)" + "Values('" + ID + "', '" + Name + "', '" + Comment + "', '" + UniqueID + "', '" + Date + "')";
using (SqlCommand com = new SqlCommand(query, conn))
{
    com.ExecuteNonQuery();
    UserWriteComment.Text = "";
}

在查询中,有一个值叫做日期。这是我喜欢将当前日期传递到我的表中的函数。

我希望你能帮助我,因为我没有设法找到答案。

谢谢:)

【问题讨论】:

  • 有什么问题?你有没有得到任何错误或意外结果?
  • 是的,我遇到了一个错误,但这很可能是因为我无法正确编写所需的字符串。
  • 只需使用不带引号的 GetDate()。
  • 如果我能得到一点代码,我会很高兴的。
  • 错误信息的文本是什么?

标签: c# sql datetime


【解决方案1】:

使用DateTime.Now 或(在数据库中通过sql)GetDate()。但更重要的是,使用 sql-parameters 来防止 sql-injection 和转换/本地化问题:

string insertSql = @"INSERT INTO Comment(TicketID, Name, Comments, UserID, Date)
                     Values(@ID, @Name, @Comment, @UniqueID, @Date)";
using (var conn = new SqlConnection("...."))
using (var com = new SqlCommand(insertSql, conn))
{
    com.Parameters.AddWithValue("@ID", ID);
    com.Parameters.AddWithValue("@Name", Name);
    com.Parameters.AddWithValue("@Comment", Comment);
    com.Parameters.AddWithValue("@UniqueID", UniqueID);
    com.Parameters.AddWithValue("@Date", DateTime.Now);
    conn.Open();
    com.ExecuteNonQuery();
}

using-statement 确保即使发生错误,连接等非托管资源也会被释放/关闭。

【讨论】:

    【解决方案2】:

    使用DateTime.Now 而不是Date。即将INSERT 行更新为以下内容。

    string query = "INSERT INTO Comment(TicketID, Name, Comments, UserID, Date)" 
                  + "Values('" + ID + "', '" + Name + "', '" + Comment + "', '" 
                  + UniqueID + "', '" + DateTime.Now + "')";
    

    P.S:你真的应该使用 Parameterize 语句来避免 Bobby Tables 的情况。

    要解决这个问题,请按照@Tim 在his answer 中的说明实现它:

    【讨论】:

    • 这也是一个有效的选项,
    • +1 推荐使用 SqlParameter 的滑稽方法:)
    • 太棒了,谢谢,没想到只是在 Values 参数中使用 datatime.now 这么“简单”
    【解决方案3】:

    代替日期,尝试使用以下

    DateTime.Now
    

    另一个可以帮助你的功能是

     GETDATE()
    

    【讨论】:

    • 您也可以考虑使用 getdate() 作为表中的默认字段值,除非您在应用服务器和数据库服务器之间遇到时区问题。
    【解决方案4】:

    SQL Server 的日期插入最好通过以下方式使用:

    GetDate() 
    

    Convert(Varchar, GetDate(), 101)
    

    注意:将GetDate() 值转换为varchar 类型101 会将值缩短为date w/o time stamp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多