トピックが示唆するように。大量のデータを参照して処理できる小さなプログラムを作成しています。問題は、SQL テーブルへの新しい行の挿入は正常に機能しますが、同じメソッドを使用して更新すると、smalldatetime 変数で問題が発生することです。
プロファイラーを使用して、exec コマンドが日付に二重引用符を付けていることに気付きましたが、それを取り除くことができないようです。さらに、挿入時に同じ二重引用符が発生し、それは問題なく機能します。手順のコマンドは次のようになります。
exec spUpdateinfo @id=デフォルト、 @job=N'Loadsoftext', @address=N'Loadsoftext', @startdate=''2009-02-01 00:00:00:000'', @enddate=''2009-05-15 00:00:00:000'', @other=N'Loadsoftext'
そして、私が得るのはこのエラーです:
メッセージ 102、レベル 15、状態 1、行 5 「2009」付近の構文が正しくありません。
私がやっていることは、asp.net コードビハインドで日付を使用し、それを通常の日付としてパラメータとして渡すことです。SQL プロシージャで smalldatetime に変換されると想定しています。使用するメソッドや変数、文字列などは挿入時とまったく同じで構いませんが、何らかの理由で UPDATING が問題を引き起こします。グーグルで PreserveSingleQuotes() 関数が使用されているのを見たことがありますが、vb または SQL Server 2005 には存在しないようです。
これを引き起こしている原因と、更新を正常に機能させる方法について何か考えはありますか?
編集:ああ、日付はもともとフィンランド語の形式で、dd.MM.yyyy です。しかし、前述のように、これはすべて正常に機能し、INSERT の使用中に自動的に変換されます。
編集 2:これがコード全体です。
Asp.Net (vb)
薄暗い日付として日付 薄暗い日付として日付 fdate = CDate(BegindateTextBox.Text.Trim) ldate = CDate(EnddateTextBox.Text.Trim) Dim ID As New SqlParameter("@id", Request.QueryString("job_id")) Dim Job As New SqlParameter("@job", JobTextBox.Text) Dim Address As New SqlParameter("@address", AddressTextBox.Text) Dim Begindate As New SqlParameter("@startdate", fdate) Dim Enddate As New SqlParameter("@enddate", ldate) Dim Otherinfo As New SqlParameter("@other", OtherinfoTextBox.Text) Begindate.DbType = DbType.Date Enddate.DbType = DbType.Date myCommand = 新しい SqlCommand("spUpdateinfo") myCommand.CommandType = CommandType.StoredProcedure myCommand.Connection = conn myCommand.Parameters.Add(ID) myCommand.Parameters.Add(ジョブ) myCommand.Parameters.Add(アドレス) myCommand.Parameters.Add(Begindate) myCommand.Parameters.Add(終了日) myCommand.Parameters.Add(その他の情報) myCommand.ExecuteNonQuery()
SQL プロシージャー
ジョブ情報を更新 SET ジョブ = @ジョブ、 アドレス= @アドレス、 Begindate = CAST(@Begindate AS smalldatetime), Enddate = CAST(@Enddate AS smalldatetime), その他の情報 = @その他の情報 WHERE Job_id = @id
センシティブを編集しなければならなかったので、しばらく時間がかかりました。とにかく、助けてくれてありがとう、何が起こっているの?キャストなどをそこに見ることができます。修正できるものは何でもいじろうとしましたが、まだ機能していません。
編集 3:助けてくれてありがとう、その日はオフなので、明日もこれを見続けます。