1

我正在尝试将日期保存到 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;
    }
4

1 回答 1

3

首先,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 命令分开的参数数据。否则,您不仅会遇到这样的日期转换问题;您还会发现自己试图弄清楚您的数据库是如何被黑客入侵的。

于 2014-12-15T05:52:15.097 回答