• ベストアンサー

アプリから受け取った文字列を日付型に出来ない

いつもお世話になっています。 タイトルにもあります通り、 アプリから受け取った文字列の日付型変換が上手くいかず失敗します。 状況は下記です。 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

質問者が選んだベストアンサー

  • ベストアンサー
  • AKARI0418
  • ベストアンサー率67% (112/166)
回答No.1

kaishibiという文字のまま実行していませんか?

wendy0303
質問者

お礼

AKARI0418さん、ありがとうございます。 >kaishibiという文字 それはないようです。 ストアド側で受け取った引数の中身は、変数"kaishibi"の中身の 文字列(例)'2000/01/01' でした。 実はこういうのを見つけまして… http://www.atmarkit.co.jp/fwin2k/operation/infopath05/infopath05_01.html 現在「一度テーブルに保存し、それを再度取り出して使用」という方法を試しています。

wendy0303
質問者

補足

AKARI0418さん、失礼しました。 jamshid6さんの指摘にある方法を試し再度デバッガで確認しました所、 初めにAKARI0418さんが指摘してくださった通り、 kaishibiという文字列をそのまま渡している事を確認しました。 デバッガで中身を参照しているにも関わらず、 意図した日付文字列が入っていると勘違いしましたのは 先にManagementStudioから入力した値が アプリから渡されていないため上書きされずに残っていた為でした。 適切な助言を戴けていたにも関わらず、自分の思い込みから 活用出来なかった事、また、自分の判断で的の外れた手段を探すなど 失礼をいたしました。 以後、頂いた助言を十分に裏付ける検証を心がけるよう努めます。 ありがとうございました。

その他の回答 (1)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

C#は殆ど書かないので「C#ってこんな書き方してもパラメータ渡せるのか?」と思ってみてましたけど、 このまま渡すと投げるのは"EXEC [ストアド名] kaishibi,syuryobi"で、書かれた通りのエラーになります。 結局先の人が書かれた通り、kaishibi/syuryobiという文字列を渡していますね。 hCommand.CommandText = "EXEC [ストアド名] '" + kaishibi + "','" + shuryobi+"'"; でないとだめでしょう。

wendy0303
質問者

お礼

jamshid6さん毎度お世話になっております。 気づけば原因は接続文字列の作成等に代表される 文字列連結の基本ですね… AKARI0418へのコメントと重複してしまいますが 以後頂いた助言を十分に裏付ける検証を心がけるよう努めます。 問題の方も解決いたしました。お騒がせしました。 ありがとうございます。

関連するQ&A

  • 日付、文字列変換に関して

    日付、文字列変換に関して 文字列の日付に対し、プラス1ヶ月した後、また文字列に戻すような 仕掛けを考えています。 そこで、以下のような記述をしましたが、どうも最後の文字列への変換が うまくいきません。 何が原因でしょうか。。。 DateTime A_time; DateTime B_time; string AFormat; AFormat = "yyyyMM"; A_time = DateTime.ParseExact("201012", AFormat, null); B_time = A_time.AddMonths(1); string C_time = B_time.ToString("YYYY/MM"); 初歩的な内容で申し訳ありませんが、よろしくお願いします。

  • datetime型でNULL値を入れたい。

    現在SQLserver上で、、CSVを一時テーブルに保管し、ある条件に合致する行のみTBLに追加するというストアドを書いています。そのTBLには「datetime型」の列があります。 この作業で、2点問題が発生しています。 (1)CSVファイルから一時テーブルにデータを入れようとすると、datetime列がNULLの場合、型の不一致でエラーが発生します。 (2)上記において、一時テーブルの型をとりあえずvarcharにしておくと入れれるのですが、TBLに追加しようとする際、「convert(datetime,変数)」としているのですが、上手くキャストしてくれません。(「文字列から日付への変換に失敗しました」のような文がでます) どのようにすれば、NULLでもdatetimeに入れられるのでしょうか?教えてください。

  • YYYYMMDDhhmmss形式の文字列を日付時刻に変換・計算する方法

    YYYYMMDDhhmmss形式の文字列を日付時刻に変換・計算する方法 お世話になっております。 今回の質問内容なのですが、 あるテーブルにYYYYMMDDhhmmss形式(varchar(14))の列がありまして、 この値の時刻計算を行いたいと思っております。 YYYY/MM/DD hh:mm:ss形式であれば、DATEADD関数で 計算が可能なのですが、やり方がわからず苦戦しております。 例えば1秒加算させたいと思い、以下のSQL文を実行してみたのですが、 SELECT DATEADD(second,1,(CONVERT(DATETIME,'20100312111111'))) 「文字列から日付/時刻に変換できませんでした。」というエラーが 発生してダメでした。 時刻部分だけ取り出して、それに時分秒を分ける「:」をつけて変換し 計算するという方法は極力避けたいと思っています。 何かいい方法がありましたら、ご教示のほどよろしくお願い致します。

  • mysqlで日付が比較できない・・・

    はじめまして 皆様の知恵を貸してください mysqlでの質問なのですが、 簡潔にいうと日付が比較できません。 どういうことをしたいのかというとsqlからwhere文で今の日付より大きいもデータを抽出するということです データベースの構造は id int型 endtime datetime型 で構成されています endtimeには既にいくつかのdatetime型の値が入っています 例えば 2012-12-14 09:18:00 のように入っています でGETDATE()関数を使って今現在の時刻より未来のものだけ抽出するために convert関数を使って一度varchar型に変換することで比較しようとしました 色々インターネットで調べた結果次のような文なのではないかと考えました select id,endtime from [データベース名] where CONVERT(VARCHAR,endtime,121)>=CONVERT(VARCHAR,getdate(),121); しかし実行ができません 比較する方法を教えて欲しいです

    • ベストアンサー
    • MySQL
  • 日付型→文字列

    SQLServer2005の環境にて、 日付型の項目(YYYY/MM/DD HH:MM:SS)から日付のみを抽出したい場合、 現在SUBSTRING(CONVERT(VARCHAR,AA),1,10) と変換を行っているのですが、結果が「MM DD YYYY」となってしまいます。 「YYYY/MM/DD」の形式で取得するにはどのようなSQL文にすればよろしいのでしょうか。

  • yyyy/M/dをyyyy/MM/ddに変換

    SQLServer 2005にて文字列型に入っている日付データの変換を行いたいと思っています。 現状yyyy/M/d(2010/1/1)のようになっているのをyyyy/MM/dd(2010/01/01)に変換したい のですが方法が分かりません。 SELECT CONVERT(DATETIME,(CONVERT(VARCHAR(10),テーブルの値)),120) FROM テーブル名 とするとCHAR データ型から DATETIME データ型への変換の結果が日付/時刻の値の範囲外です。 というエラーになっていまいます。どういった方法なら実現できるのでしょうか。 すみませんがご教授ください。 宜しくお願い致します。

  • 日付や日時を格納する場合の型はどうしていますか?

    WEBアプリケーションで データベース(MySQL)を使うのですが、 日付や日時を格納する場合の型は varchar(10)、date、datetime のどれにしていますか? 文字型と日付型か迷っているので、 メリット、デメリットがあれば知りたいです。

    • ベストアンサー
    • MySQL
  • 【Excelマクロ】 文字列から日付型へ変換したい

    AccessデータをExcelへ貼り付ける際、Access側の書式設定がyyyy/mm/ddでしたらExcelでも日付型として認識してくれますが、yyyy/mm/dd(aaa)と曜日を表記したデータはセルの書式を日付型にしても文字列として貼り付けられてしまいます。 ExcelのDATEVALUE関数を使用すれば日付型へ変換できるのは存じていますが、列/行を挿入することができません。 日付型へ変換できるマクロはありませんか? 変換したいセル番地は都度変動しますので、変換したいセル(複数列/行)を選択した状態からマクロを実行したいです。

  • 文字列の日付を日付型に変換するには?

    http://calendar.infocharge.net/cal/2014/ のサイトをエクセルに貼り付けると、日付が文字列になってしまうのですが 貼り付け後に日付型に変換する方法はありますか?

  • 日付を文字列にする方法

    日付を文字列に変換する方法を教えてください。 2008/03/21 --> Mar.21 Mar.21は、完全に文字列です。セルの中では、左詰となります。 宜しくお願いいたします。