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

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

ただいまの
回答率

90.35%

  • C#

    9666questions

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

C# データベース INSERT INTOについて

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 267

Kei_Saxop

score 5

こんにちは。全くの初心者なのですが、わからないところがあるので質問させていただきます。
環境:Visual Studio 2019
DB接続:Access 2019 .mdb形式 OLEDB
言語:C#
データベースに新規レコードを追加したいです。
今、デザイナーでTextbox1 Textbox2 Textbox3・・・とあり、データベースの縦列はA B C・・・とあります。
Textbox1に入力された値をA、Textbox2はB、Textbox3はCに入れたいのですが、、、できません。
テーブル名はSheet1です。
どうすればよいでしょうか?

String sCS = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:~~~~~.mdb";
            OleDbConnection oleConn = new OleDbConnection(sCS);
            OleDbCommand oleCmd = new OleDbCommand();
            int iRet;
            oleConn.Open();

            oleCmd.Connection = oleConn;
            oleCmd.CommandText = "INSERT INTO sheet1 (A,B,C)"
                + "VALUES(Textbox1.Text,Textbox2.Text,Textbox3.Text)";


あ、A,B,CとかTextbox1とかはここに載せるための仮名です。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

リテラルは ' と ' で囲う必要があると思いますが?

SQL の構文をググって調べるなどしましょう。sql insert などをキーワードにググれば参考になる記事が多々ヒットすると思います。例えば下記:

データの登録を行うINSERT文
https://www.atmarkit.co.jp/ait/articles/0104/11/news002.html

あと、ユーザー入力で SQL の文字列を組み立てるのは、SQL インジェクションをやってくださいと言ってるようなものです。今の問題が解決したら、次のステップとして必ずパラメータ化することを考えてください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/04/30 16:43

    なるほど、申し訳ないです。
    Insert については分かりました。しかし、insert into ---
    values----
    のvaluesの後、textbox1 に入力された内容を入力するコードが分かりません。
    多分、基本中の基本でしょうが…
    どうやって調べればいいかもわからずで…すみません。

    キャンセル

  • 2019/04/30 17:26 編集

    まず、TextBox 入力はちょっと置いといて、単純に INSERT クエリの文字列を、例えば以下のように組み立てて、

    oleCmd.CommandText = "INSERT INTO sheet1 (A,B,C) VALUES('A', 'B', 'C')";

    それを試してみたらどうなりますか? そういう単純な形で、A, B, C が INSERT できることをまず確実にしてください。

    キャンセル

  • 2019/04/30 23:43

    ありがとうございます。
    また出直してきます。

    キャンセル

0

そのコードの下にこれを入れましょう。

oleCmd.ExecuteNonQuery();

TextBox1の入れ方

TextBox1.Textの内容をstring変数に入れるのにいつもどうやってされていますか?
CommandTextはstringですよ。マウスポインターをCommandTextに当てて見てください、ビュー表示が出ますのでstringと表示されているかと思います。
入力文字との文字列の連結をまず学習されると良いかもしれません。

すでに回答も出ていますように入力をそのままSQL文に当てるのは良くないので
この問題が解決されたら
OleDbCommandクラスのParameters.Add();やParameters().Value = 値;
を調べてみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C#

    9666questions

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