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 に答える