このクエリを実行しようとしています
"INSERT INTO Orders Values (" + OrderId.Text + ',' + IDCustTextBox.Text + ',' + CustName.Text + ",SELECT CONVERT(DATE, GETDATE()))"
クエリを直接修正するには、まず、一重引用符が一致していません。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
してオブジェクトを適切に破棄するを使用しているためINSERT INTO ...VALUES
、 は必要ありませんSELECT
。以下を使用します。
"INSERT INTO Orders
Values ('" + OrderId.Text + "','" + IDCustTextBox.Text + "','" + CustName.Text + "',GETDATE())"
ちなみに、GETDATE()
すでに日付になっているので、日付に変換する必要はありません。
DEFAULT GETDATE() でテーブルを変更できませんか?? 次に、個別に挿入したくありません。例: CREATE TABLE Orders ( OrderId int NOT NULL PRIMARY KEY, ProductName varchar(50) NOT NULL, OrderDate datetime NOT NULL DEFAULT GETDATE() )