質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

3回答

9681閲覧

【C#】「文字列は有効な DateTime ではありませんでした。」

bbdd

総合スコア43

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2018/03/12 04:19

編集2018/03/12 04:43

前提

・Windowsデスクトップアプリを作成しています
・Visual Studio を使用
・WPF
・C#

実現したいこと

DBに保存されているTIMESTAMP型の値を取得してきた際にstring型に変換して独自オブジェクトのプロパティにセットしたい。

発生している問題

SQLを実行しtimeの値を取り出し、myObject.Timestring型)に代入しようとした際に
「文字列は有効な DateTime ではありませんでした。」というエラーが発生する。

↓DBに保存されているタイムスタンプ(timeカラム)

2018-03-12`T`12:36:36`+9:00`

↓エラー箇所周辺

using (SQLiteDataReader reader = command.ExecuteReader()) { while (reader.Read()) { // 省略(myObjectのインスタンス生成) // ここの型変換が上手くいかない myObject.Time = reader["time"].ToString(); } }

Convertを使用してみたりもしたのですが、上手くいかず、、、
修正方法をご教授頂けると幸いです。

###追記

↓SQLの記述は以下の通りです。

connection.Open(); using (SQLiteCommand command = connection.CreateCommand()) { //SQLの設定 command.CommandText = "select * from hoge where hoge_id = @hoge_id and fuga_id = @fuga_id"; command.Parameters.Add(new SQLiteParameter("@hoge_id", hogeId)); command.Parameters.Add(new SQLiteParameter("@fuga_id", fugaId)); command.Prepare(); using (SQLiteDataReader reader = command.ExecuteReader()) { while (reader.Read()) { // 省略 } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2018/03/12 04:31

command の SQL を見せてください。 代入時にエラーが起きているのではなく、データを取り出す時に起きているんだと思います。
bbdd

2018/03/12 04:43

情報の不足失礼しました。「追記」にて記述致しました。
Zuishin

2018/03/12 04:58

SQLite に TIMESTAMP 型というのは存在しませんが、テーブルはどのような設定になっていますか?
Zuishin

2018/03/12 05:02

見たところ、どこにも DateTime に変換する部分はありません。もしかしたらここではなくこの後に問題があるのかもしれません。どこかで myObject.Time を使っていませんか?
guest

回答3

0

自己解決

Zuishinさんの質問にありました、

SQLite に TIMESTAMP 型というのは存在しませんが、テーブルはどのような設定になっていますか?

を参考に、日付を入れるDBのカラムをTEXT型とすることで対応しました。
DB内容を確認するために DB Browser for SQLite を使用していたのですが、カラムの型としてTIMESTAMPが存在しており、そこを修正しました。

投稿2018/03/22 01:46

bbdd

総合スコア43

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「文字列は有効な DateTime ではありませんでした。」というエラーが発生する。

この部分がひっかかりますね。

C#

1 string strTest = "2018-03-12`T`12:36:36`+9:00`"; 2 label1.Text = strTest; // OK 3 4 DateTime dt = new DateTime(); 5 dt = strTest; //NG

myObject.TimeがDateTime型でしたら、SQLiteの値をそのまま入れずに、
DateTime型に合わせる必要があります。
文字列から年月日時分秒をそれぞれ取り出してから、DateTime型に入れれば良いかと思います。
(なおSQLの表記がGMT+9時間なので、恐らく日本時間に合わせる処理も必要になると思います。)

投稿2018/03/12 04:46

編集2018/03/12 06:18
Wind

総合スコア442

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

DBになにをお使いか明記されていませんが、DB内の時間表記とC#のDateTimeクラスの時間表記が異なるため、エラーとなっています。

こういった表記差分は、自分で文字列をパースして入れなおすのが一番手っ取り早いかと思います。

投稿2018/03/12 04:26

kazto

総合スコア7196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問