- ベストアンサー
アプリから受け取った文字列を日付型に出来ない
いつもお世話になっています。 タイトルにもあります通り、 アプリから受け取った文字列の日付型変換が上手くいかず失敗します。 状況は下記です。 SQL SERVER 2005に、 アプリから2っの文字列を受け取り、その文字列を日付型に変換し、 日付範囲検索をする。といったストアドを作成しました。 アプリ開発環境はVisualStudio2008、C#のウィンドゥズフォームです。 ストアド自体はManagement Studio上で日付型変換可能な 文字列2っを渡し、単体で実行すると期待通りの動作をします。 しかしアプリから文字列を受け取り実行すると、 「文字列から datetime 型に変換中、変換に失敗しました。」 というエラーがアプリ側に返されます。 しかし、この時アプリが渡す文字列をコピー&ペーストで ManagementStudioのクエリデザイナで実行すると上手く行きます。 アプリから日付変換前の文字列を渡す時に必要な何かが抜けているのでしょうか?ご教授お願いします。 ---ストアドを呼ぶアプリ側--- string kaishibi; string syuryobi; kaishibi += "1753/01/01"; syuryobi += "9999/12/31"; System.Data.SqlClient.SqlCommand hCommand = cSqlConnection.CreateCommand(); hCommand.CommandText = "EXECUTE [ストアド名] kaishibi,syuryobi"; System.Data.SqlClient.SqlDataReader cReader = hCommand.ExecuteReader(); (ここでエラー、「文字列から datetime 型に変換中、変換に失敗しました」) --ストアド側-- ALTER PROCEDURE [ストアド名] @startData VARCHAR(50), @endData VARCHAR(50) DECLARE @kaishibi DATETIME, @syuuryoubi DATETIME SET @kaishibi = CONVERT(VARCHAR,@startData,120) SET @syuuryoubi = CONVERT(VARCHAR,@enddata,120) SELECT LOGNO FROM LOG_TBL WHERE DateTime between @kaishibi and @syuuryoubi
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
kaishibiという文字のまま実行していませんか?
その他の回答 (1)
- jamshid6
- ベストアンサー率88% (591/669)
C#は殆ど書かないので「C#ってこんな書き方してもパラメータ渡せるのか?」と思ってみてましたけど、 このまま渡すと投げるのは"EXEC [ストアド名] kaishibi,syuryobi"で、書かれた通りのエラーになります。 結局先の人が書かれた通り、kaishibi/syuryobiという文字列を渡していますね。 hCommand.CommandText = "EXEC [ストアド名] '" + kaishibi + "','" + shuryobi+"'"; でないとだめでしょう。
お礼
jamshid6さん毎度お世話になっております。 気づけば原因は接続文字列の作成等に代表される 文字列連結の基本ですね… AKARI0418へのコメントと重複してしまいますが 以後頂いた助言を十分に裏付ける検証を心がけるよう努めます。 問題の方も解決いたしました。お騒がせしました。 ありがとうございます。
お礼
AKARI0418さん、ありがとうございます。 >kaishibiという文字 それはないようです。 ストアド側で受け取った引数の中身は、変数"kaishibi"の中身の 文字列(例)'2000/01/01' でした。 実はこういうのを見つけまして… http://www.atmarkit.co.jp/fwin2k/operation/infopath05/infopath05_01.html 現在「一度テーブルに保存し、それを再度取り出して使用」という方法を試しています。
補足
AKARI0418さん、失礼しました。 jamshid6さんの指摘にある方法を試し再度デバッガで確認しました所、 初めにAKARI0418さんが指摘してくださった通り、 kaishibiという文字列をそのまま渡している事を確認しました。 デバッガで中身を参照しているにも関わらず、 意図した日付文字列が入っていると勘違いしましたのは 先にManagementStudioから入力した値が アプリから渡されていないため上書きされずに残っていた為でした。 適切な助言を戴けていたにも関わらず、自分の思い込みから 活用出来なかった事、また、自分の判断で的の外れた手段を探すなど 失礼をいたしました。 以後、頂いた助言を十分に裏付ける検証を心がけるよう努めます。 ありがとうございました。