1

私の SQL Server 2008 データベースには、 datatype の列を持つテーブルがありますdatetime

datetime列に値を挿入しようとすると、エラーが発生します。

「-」付近の構文が正しくありません

私の日時ピッカーにはカスタム形式がありますyyyy-MM-dd(例:(2012-11-01))

以下は、挿入に使用したコード サンプルですdatetime

 System.DateTime myDate = default(System.DateTime);
 myDate = DateTimePickerPrint.Value;
 string query = string.Format("EXEC Save_Quotation_Bookshop '" + txt_QutationNo.Text + "','" + txt_CusCode.Text + "',#" + myDate + "#,");

どなたかアイデアをお願いします。

4

3 に答える 3

1

最初に: SQLコードを連結するのはやめましょう! これは SQL インジェクション攻撃の誘因であり、パフォーマンスにも非常に悪いため、代わりにパラメーター化されたクエリを使用してください。

そうすれば、日時/文字列変換の問題も発生しません.....

DateTime第二に、SQL ServerYYYYMMDDの日付のみの「安全な」形式は、ダッシュなしです。この形式だけが、言語、地域、および日付形式の設定に関係なく、任意の SQL Server で実行されることを保証します。

第三に。ストアド プロシージャを実行する場合は、次のアプローチを使用することをお勧めします。

System.DateTime myDate = default(System.DateTime);
myDate = DateTimePickerPrint.Value;

using (SqlConnection con = new SqlConnection(your-connection-string-here))
using (SqlCommand cmd = new SqlCommand("dbo.Save_Quotation_Bookshop", con))
{
    // tell ADO.NET it's a stored procedure (not inline SQL statements)
    cmd.CommandType = CommandType.StoredProcedure;

    // define parameters
    cmd.Parameters.Add("@QuotationNo", SqlDbType.VarChar, 50).Value = txt_QutationNo.Text;
    cmd.Parameters.Add("@CustomerCode", SqlDbtype.VarChar, 25).Value = txt_CusCode.Text;
    cmd.Parameters.Add("@SaleDate", SqlDbType.DataTime).Value = myDate;

    // open connection, execute stored procedure, close connection again
    con.Open();
    cmd.ExecuteNonQuery();
    con.Close();
}

インライン SQL ステートメントとして使用しないEXEC ......でください。ストアド プロシージャを実行していることを ADO.NET に伝え、パラメータを指定してください。そうすれば完了です。

于 2012-11-01T05:57:29.897 に答える
1

# の代わりに単一引用符で日付を囲みます。

この文字列連結は、発生を待っている SQL インジェクションです。代わりにパラメーターを指定して SqlCommand を使用すると、文字列変換の問題について心配する必要がなくなります

于 2012-11-01T01:22:25.800 に答える
0

これを試して

string query = String.Format("EXEC Save_Quotation_Bookshop '{0}','{1}','{2}'",txt_QutationNo.Text,txt_CusCode.Text, myDate);

また

string query = string.Format("EXEC Save_Quotation_Bookshop @QutationNo,@CusCode,@myDate");

...
comm.Parameters.AddWithValue("@QutationNo", txt_QutationNo.Text);
comm.Parameters.AddWithValue("@CusCode", txt_CusCode.Text);
comm.Parameters.AddWithValue("@myDate", myDate);
于 2012-11-01T01:28:47.113 に答える