ここから本文です

VB初心者ですが、VBからSQL文の記述について教えて下さい。

アバター

ID非公開さん

2017/12/1611:07:35

VB初心者ですが、VBからSQL文の記述について教えて下さい。

SQLに書込みするとき、DateTimePickerで所得した日付(DateTime)を書き込む時

CommandText = "INSERT INTO 商品マスター (商品コード,商品名称,商品単価,単位,登録日) VALUES " & "(" & TextBox1.Text & ",'" & TextBox2.Text & "'," & TextBox3.Text & ",'" & TextBox4.Text & "','" & DateTime.Text & "')"

とすると、変換エラーとなります。
SQLのデータ型はDateTimeです。
どうすればよいのでしょうか?よろしくお願いします。

閲覧数:
103
回答数:
4
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

hos********さん

2017/12/1613:42:35

SQLに直接値を書いてしまうと、例えば商品名称に にシングルクォートを含む商品名称が入力されるとエラーになってしまうので、Prepare を使いましょう。
DateTimeの部分は、直接Date型を入れても変換されずエラーになったりするようなので、ToStringしてやるなどが必要なのかもですね。

command.CommandText = "INSERT INTO 商品マスター (" _
& "商品コード" _
& ", 商品名称" _
& ", 商品単価" _
& ", 単位" _
& ", 登録日" _
& ") VALUES (" _
& "@商品コード" _
& ", @商品名称" _
& ", @商品単価" _
& ", @単位" _
& ", @登録日" _
& ")"
command.Prepare()

command.Parameters.Clear()
command.Parameters.AddWithValue("@商品コード", TextBox1.Text)
command.Parameters.AddWithValue("@商品名称", TextBox2.Text)
command.Parameters.AddWithValue("@商品単価", TextBox3.Text)
command.Parameters.AddWithValue("@単位", TextBox4.Text)
command.Parameters.AddWithValue("@登録日", DateTimePicker1.Value.ToString("yyyy-MM-dd HH:mm:ss"))

command.ExecuteNonQuery()

  • アバター

    質問者

    ID非公開さん

    2017/12/1616:53:31

    回答ありがとうございます。

    今日は時間がないので、後でやってみます。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

アバター

質問した人からのコメント

2017/12/18 12:05:00

ありがとうございました。

教えていただいた方法できました。

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

ara********さん

2017/12/1614:39:56

大抵のデータベースなら文字列の 'yyyy-mm-dd' なら日付型に暗黙変換されます。書式がそれ以外だったらCASTとかCONVERTとか使う必要があるでしょう。っていうか、SQLインジェクションの餌食なのでユーザー入力を文字列連結してクエリを作ってはいけません ' OR 1=1

SQLインジェクション
https://ja.wikipedia.org/wiki/SQL%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%...

tac********さん

2017/12/1611:30:04

アクセスで日付を対象に検索する場合 # で囲う必要が有ります、
SQLサーバーに依っては別の文字の場合も有るようです。

もしかしたらそれが原因かも?


Access クエリで抽出条件として日付を使用する例
https://support.office.com/ja-jp/article/Access-クエリで抽出条件として日付を使用する例-aea83b3b-46eb-43dd-8689-5fc961f21762

プロフィール画像

カテゴリマスター

hat********さん

2017/12/1611:23:42

データベースはAccessですか。
だとしらSQLには下記の規則があります。

数値データはそのまま、
文字列データは引用符(')で囲む
日付/時刻データは # で囲む

ということで下記のコードでどうですか。

CommandText = "INSERT INTO 商品マスター (商品コード,商品名称,商品単価,単位,登録日) VALUES " & "(" & TextBox1.Text & ",'" & TextBox2.Text & "'," & TextBox3.Text & ",'" & TextBox4.Text & "',#" & DateTime.Text & "#)"

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる