初心者です
WindowsのC#で予約システムを作っています
VisualStudio、MySQL
顧客から受け付けた予約、(時間やメニュー)などをデータベースに保存するということをしたいです
実行しても最後から2行目の cmd.ExecuteReader();がエラーになってしまいます
こんなこと質問してしまいすいません。
わかる方教えていただけますでしょうか。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 予約システム
{
public partial class Form2 : Form
{
SqlConnection cn;
public Form2() { InitializeComponent(); cn = new SqlConnection(); //接続文字列の設定 cn.ConnectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\csharp\Desktop\予約システム\予約システム\Database1.mdf;Integrated Security=True"; ConectDB(); } private void ConectDB() { //データベースへの接続 cn.Open(); //SQL文の作成準備 SqlCommand cmd = new SqlCommand(); cmd.Connection = cn; //SQL文はText cmd.CommandType = CommandType.Text; //SQL文設定 cmd.CommandText = "SELECT * FROM [dbo].[Table]"; //SQL文の実行 rdに読込 SqlDataReader rd; rd = cmd.ExecuteReader(); string str = ""; while (rd.Read()) //rdから1行ずつ取り出し { str += rd["id"] + "\t" + rd["name"] + "\t" + rd["date"] + "\t" + rd["menu"] + "\t" + rd["tel"] + "\r\n"; } cn.Close(); } private void button1_Click(object sender, EventArgs e) { //データベースへの接続 cn.Open(); //SQL文の作成準備 SqlCommand cmd = new SqlCommand(); cmd.Connection = cn; //SQL文はText cmd.CommandType = CommandType.Text; //SQL文設定 cmd.CommandText = "INSERT INTO [dbo].[Table](name, date,menu,tel) VALUES (N'" + name + "'," + date + "'," + menu + "'," + tel + ")"; cmd.ExecuteReader(); cn.Close(); } }
}
質問文の記載内容が不十分すぎる。
これはただの丸投げ。
ガイドライン読んで書き直して。
https://teratail.com/help/question-tips
https://teratail.com/help/avoid-asking
コードは ``` と ``` で囲ってください(``` はバッククォート 3 つ)。インデントされて見やすくなるので。
何を作っているかと(Windows Forms? WPF? コンソールアプリ? その他?)と開発環境(OS, Visual Studio のバージョン、DB は何かとそのバージョン・エディション、.NET か Core のどっちかとそのバージョンなど)を書いてください。コードを読めばわかるとは言わないでくださいね。あなたが質問の一行目にそれを書けば閲覧者は中まで読む手間は省けるのですから。
エラーメッセージをコピペして質問文に記載してください。エラーメッセージだけで原因と解決策が分かることが多々あります。なのでエラーメッセージを書くのは質問する際の基本のキです。
> 実行しても最後から2行目の cmd.ExecuteReader();がエラーになってしまいます
エラーの内容を記載してください。(部分的ではなくそのまま)
エラーメッセージやスタックトレースには解決の為のヒントになる情報が詰まっています。
被ってしまいましたね、失礼しました。
コードは ``` と ``` で囲ってください(``` はバッククォート 3 つ)。インデントされて見やすくなるので。インデントされてないコードは質問者さん自身も読む気がしないのでは? 閲覧者・回答者はなおさらです。読んでもらえないと話が始まらないのですから読んでもらえる努力をしませんか?
何を作っているかと(Windows Forms? WPF? コンソールアプリ? その他?)と開発環境(OS, Visual Studio のバージョン、DB は何かとそのバージョン・エディション、.NET か Core のどっちかとそのバージョンなど)を書いてください。コードを読めばわかるとは言わないでくださいね。あなたが質問の一行目にそれを書けば閲覧者は中まで読む手間は省けるのですから。
> MySQL
違うのでは?
ここにもと有ったコメントは回答欄に移動させました。
質問者さん、無言ですが、回答がついてますのでそれに対するフィードバックを書いてください。役に立った / 立たなかったぐらいは回答できるのでは? 欲に立たなかったならどこがダメだったのかを書くとより有用な回答が得られるかもしれません。とにかく無言で放置は NG です。
遅れて申し訳ございません。
解決できました。
写真のようにrd=cmd.ExecuteReader():にエラーが出ていて、回答していただいたところをこのように改善したら治りました。↓
cmd.CommandText="INSERT INTO[dbo][Table](Name,Date,Menu,Tel)VALUES(N'"+ name + "',N'"+ date+"',N'"+ menu +"',N'"+ tel+"')":
シングルクォーテーションをつけたり位置を気をつけたら改善できました!
ありがとうございました
解決できたとのことですのでこのスレッドはクローズ願います。
今回も問題の原因とは直接関係ないことですが、INSERT の場合は ExecuteReader ではなく ExecuteNonQuery を使いましょう。
このスレッドをクローズしてください。