如果我以 dd-MM-yy 格式传递日期,则将日期以 yyyy-MM-dd 格式保存到 SQL Server 2008

本文关键字:日期 格式 保存 yyyy-MM-dd 2008 SQL Server dd-MM-yy 如果 | 更新日期: 2023-09-27 18:34:11

我正在尝试将日期保存到SQL Server 2008数据库中。我已经将日期转换为dd/MM/yyyy格式,即使日期以yyyy-MM-dd格式存储在数据库中。我的按钮点击代码:

protected void Submit_Click(object sender, EventArgs e)
{
    DateTime fdate = DateTime.ParseExact(txtDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture);
    sample = fdate;
}
public class sample
{
    public string sample(DateTime fdate)
    {
       string qry = "insert into sample values('"+fdate+"')";
       SqlDataReader dr = conn.query(qry);
    }
}

数据库日期(列)数据类型为 date 。我可以知道原因吗??
我的其他课程

  public class Connection
{
    SqlConnection conn;
    SqlCommand cmd;
    public SqlDataAdapter ad;
    public DataTable dt = new DataTable();
    public void connclose()
    {
        conn.Close();
    }
    public Connection()
    {
        conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString);
        cmd = null;
    }
  //------------------ connection string---------------------------------------------------------
  ---------------------//
    public string nonquery(string qry)
    {
        string str;
        if (conn.State == ConnectionState.Open)
        {
            conn.Close();
        }
            conn.Open();
        cmd=new SqlCommand(qry, conn);
        str=cmd.ExecuteNonQuery().ToString();
        conn.Close();
        return str;
    }
    public SqlDataReader query(string qry)
    {
        if (conn.State == ConnectionState.Open)
        {
            conn.Close();
        }
        conn.Open();
        cmd = new SqlCommand(qry, conn);
        SqlDataReader dr = cmd.ExecuteReader();
        return dr;
    }

如果我以 dd-MM-yy 格式传递日期,则将日期以 yyyy-MM-dd 格式保存到 SQL Server 2008

首先,Sql Server 根本不以 yyyy-MM-dd 格式存储您的数据。它以人类不可读的二进制格式存储日期,并且仅将它们转换为您在查询工具中为方便起见的格式。如果你正在考虑格式,你已经做错了什么。你需要这样做:

public string sample(DateTime fdate)
{
    string qry = "insert into sample values( @date )";
    using (var cn = new SqlConnection("connection string here") )
    using (var cmd = new SqlCommand(qry, cn))
    {
        cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = fdate;
        cn.Open();
        using (var dr = cmd.ExecuteReader())
        {
            //use dr here...
        }
    }
}

当然,您有那个conn对象,它看起来像是具有代码来帮助您避免某些样板。这很好,但您需要更新该对象,以便它query()方法需要的不仅仅是 sql 字符串。它还必须具有某种机制来接受独立于 sql 命令的参数数据。否则,您不仅会遇到这样的日期转换问题;您还会发现自己试图弄清楚您的数据库是如何被黑客入侵的。