-2

このクエリを実行しようとしています

"INSERT INTO Orders Values (" + OrderId.Text + ',' + IDCustTextBox.Text + ',' + CustName.Text + ",SELECT CONVERT(DATE, GETDATE()))"
4

3 に答える 3

5

クエリを直接修正するには、まず、一重引用符が一致していません。2 番目GETDATE()に、 int 値を直接渡すことができます。

string _insert = "INSERT INTO Orders Values ('" + OrderId.Text + "','" + IDCustTextBox.Text + "','" + CustName.Text + "',GETDATE())"

あなたのSQL文は非常に弱いです。回避する値をパラメータ化する必要がありますSQL Injection

あなたが使用していると仮定してSQL Server

string connStr = "connection string here";
string insertStatement = @"INSERT INTO Orders 
            Values (@ordID, @custID, @custName, GETDATE())";

using (SqlConnection conn = new SqlConnection(connStr))
{
    using (SqlCommand comm = new SqlCommand())
    {
        comm.Connection = conn;
        comm.CommandType = CommandType.Text;
        comm.CommandText = insertStatement;
        comm.Parameters.AddWithValue("@ordID", OrderId.Text);
        comm.Parameters.AddWithValue("@custID", IDCustTextBox.Text);
        comm.Parameters.AddWithValue("@custName", CustName.Text);
        try
        {
            conn.Open();
            conn.ExecuteNonQuery();
        }
        catch(SqlException ex)
        {
            // do something with the exception
            // ex.ToString()
            // don't hide it
        }
    }
}

改善するには:

  • 使用CommandおよびParameter回避するSQL Injection
  • 使用CommandおよびParameter回避するSQL Injection--:D
  • try-catchブロックを使用して例外を適切に処理する
  • ステートメントを使用usingしてオブジェクトを適切に破棄する
于 2013-03-30T14:52:07.380 に答える
1

を使用しているためINSERT INTO ...VALUES、 は必要ありませんSELECT。以下を使用します。

"INSERT INTO Orders 
 Values ('" + OrderId.Text + "','" + IDCustTextBox.Text + "','" + CustName.Text + "',GETDATE())"

ちなみに、GETDATE()すでに日付になっているので、日付に変換する必要はありません。

于 2013-03-30T14:52:14.797 に答える
0

DEFAULT GETDATE() でテーブルを変更できませんか?? 次に、個別に挿入したくありません。例: CREATE TABLE Orders ( OrderId int NOT NULL PRIMARY KEY, ProductName varchar(50) NOT NULL, OrderDate datetime NOT NULL DEFAULT GETDATE() )

于 2013-03-30T15:10:28.947 に答える