0

データベースにDateTimeを挿入できません。私はステートメントを間違って書いていますか?

どうやらDateTimeがなくても、データベースに挿入できます

    string dateAndTime = date + " " + time;

    CultureInfo provider = CultureInfo.InvariantCulture;        
    DateTime theDateTime = DateTime.ParseExact(dateAndTime, "d MMMM yyyy hh:mm tt", provider);

//Create a connection, replace the data source name with the name of the SQL Anywhere Demo Database that you installed
            SAConnection myConnection = new SAConnection("UserID=dba;Password=sql;DatabaseName=emaDB;ServerName=emaDB");
            //open the connection 
            ; myConnection.Open();
            //Create a command object. 
            SACommand insertAccount = myConnection.CreateCommand();
            //Specify a query. 
            insertAccount.CommandText = ("INSERT INTO [meetingMinutes] (title,location,perioddate,periodtime,attenders,agenda,accountID,facilitator,datetime) VALUES ('"+title+"','" + location + "', '" + date + "','" + time + "', '" + attender + "','" + agenda + "', '" + accountID + "','" + facilitator + "','" +theDateTime+ "')");
try
    {
        insertAccount.ExecuteNonQuery();

        if (title == "" || agenda == "")
        {
            btnSubmit.Attributes.Add("onclick", "displayIfSuccessfulInsert();");
            //ScriptManager.RegisterStartupScript(this, GetType(), "error", "alert('Please ensure to have a title or agenda!');", true);
        }
        else
        {

            btnSubmit.Attributes.Add("onclick", "displayIfSuccessfulInsert();");
            Response.Redirect("HomePage.aspx");
            //ScriptManager.RegisterStartupScript(this, this.GetType(), "Redit", "alert('Minutes Created!'); window.location='" + Request.ApplicationPath + "/HomePage.aspx';", true);
        }
    }
    catch (Exception exception)
    {
        Console.WriteLine(exception);
    }

    finally 
    {            
        myConnection.Close();          
    }

SQLをデータベースに挿入しません。

PS:たとえば、theDateTimeは、2012年7月14日1:35:00AMの値である可能性があります。これをデータベースに挿入する方法は??

4

3 に答える 3

2

はい、パラメーター {0}、{1} などを使用してクエリを作成し、Parameters.Addを使用する必要があります。

insertAccount.CommandText = ("INSERT INTO [meetingMinutes]  
   (title,location,perioddate,periodtime, ...) 
   VALUES (?,?,?,?,  ... )");
insertAccount.Parameters.Add( ... );

これにより、SQL が正しい構文で形成されます。また、SQL インジェクション攻撃も防ぎます。

于 2012-07-05T09:13:51.057 に答える
1

まず第一に、SQL クエリまたはコマンドに文字列連結を使用しないでください。パラメータを使用します。パラメータを使用する場合:

  • SQLインジェクションを行うことはできません
  • クエリ テキストとプランがキャッシュされるため、パフォーマンスが向上します
  • あなたの場合に重要なこと-値のフォーマットについて考える必要はなく、DateTime変数をパラメーターとして渡すだけです

また、DB 列に datetime2 型があることも確認してください。そうしないと、1758 年 1 月 1 日よりも前の値を格納できない可能性が高くなります (DateTime.MinValue など)。

于 2012-07-05T09:33:39.257 に答える
0

年の日付に引用符を使用しないでください。日付を使用しているすべての引用符を削除してください

change ,'" +theDateTime+ "') to ," +theDateTime+ ") 

また、セキュリティで保護された yr sql により、SQL インジェクションの保存が解除されます

于 2012-07-05T09:17:10.153 に答える