- 投稿日:2021-02-27T23:01:08+09:00
C#とMySQLを接続してCRUD操作をしてみる
環境
Windous10 HOME
Visual Studio 2019 Community
MySQL 8.0やったこと
学習のためにVisual Studio C#でMySQLのCRUD操作ができるコンソールアプリを作成する。
※CRUD → CREATE、READ、UPDATE、DELETE参考
https://qiita.com/yuzooho/items/5d608f3b84a2037cada0
https://qiita.com/kazumi75kitty/items/9953bb84edd7717bc90a
https://mikeda.hatenablog.com/entry/20090419/1240123566上記を参考にさせていただきました。
ありがとうございます。環境設定
- 「新しいプロジェクトの作成」からコンソールアプリ(.NET Framework)を選択して作成します。
※この時「C#」「Windows」「コンソール」と書かれている方選ばないと後々MySQLと接続できなくなります。
- 「参照」を右クリックして「参照の追加」を選択します。
参照マネージャーの検索でMySQLと入力して「MySql.data」にチェックして「OK」を選択する。
- MySQLのコマンドを起動してデータベース「test_database」を作成します。
MySQLCREATE DATABASE test_database;「test_database」が作成されているか確認します。
MySQLSHOW DATABASES;「test_database」が作成されました。
コードを記述
- CRUD操作を行うコードを記述していきます。
Program.csusing System; using MySql.Data.MySqlClient;// MySQLを使用 namespace MySQLテスト { class Program { // MySQLへの接続情報 private static readonly string server = "localhost"; private static readonly string database = "test_database";//使用するデータベース private static readonly string user = "root";//ユーザー名 private static readonly string pass = "password";//インストール時に設定したパスワード private static readonly string charset = "utf8"; // MySQLへの接続 private static readonly string connectionString = string.Format("Server={0};Database={1};Uid={2};Pwd={3};Charset={4}", server, database, user, pass, charset); // テーブル作成SQL private static readonly string MysqlTable = "test_table";//テーブル名 private static readonly string CreateTableSql = "CREATE TABLE IF NOT EXISTS " + database + "." + MysqlTable + "(id int, name varchar(32), address varchar(32))"; //データ挿入SQL private static readonly string InsertData = "(1, 'Tarou', 'Shinjuku'), (2, 'Hiroshi', 'Shibuya'), (3, 'Yumi', 'Setagaya'), (4, 'miku', 'Chiyoda')";//挿入するデータ private static readonly string InsertTableSql = "INSERT INTO " + MysqlTable + " (id, name, address) VALUES " + InsertData; //データ抽出用SQL private static readonly string SelectSql = "SELECT * FROM " + MysqlTable;//全てのカラムのデータを出力 //データ更新用SQL private static readonly string UpdateSql = "UPDATE " + MysqlTable + " SET address = 'Meguro' WHERE name = 'Hiroshi'";//「Hiroshi」のaddressを「Meguro」に変更 //データ削除用SQL private static readonly string DeleteSql = "DELETE FROM " + MysqlTable + " WHERE id = 4";//「id」が4のレコードを削除 static void Main(string[] args) { try { // コネクションオブジェクトとコマンドオブジェクトの生成 using (var connection = new MySqlConnection(connectionString)) using (var command = new MySqlCommand()) { // コネクションオープン connection.Open(); // テーブル作成SQLを実行 command.Connection = connection; command.CommandText = CreateTableSql; Console.WriteLine("テーブル「" + MysqlTable + "」を作成しました"); command.ExecuteNonQuery(); Console.WriteLine("続行するには何かキーを押してください"); Console.ReadKey(); // データ挿入用SQLを実行 command.Connection = connection; command.CommandText = InsertTableSql; Console.WriteLine("テーブル「" + MysqlTable + "」にデータ「" + InsertData + "」を挿入しました"); command.ExecuteNonQuery(); Console.WriteLine("続行するには何かキーを押してください"); Console.ReadKey(); // データ抽出SQLを実行 command.Connection = connection; command.CommandText = SelectSql; Console.WriteLine("テーブル「" + MysqlTable + "」のデータを出力します"); //カラム名を出力 MySqlDataReader reader = command.ExecuteReader(); string[] column = new string[reader.FieldCount]; for (int i = 0; i < reader.FieldCount; i++) column[i] = reader.GetName(i); Console.WriteLine(string.Join("\t", column)); //テーブルのデータを出力 while (reader.Read()) { string[] row = new string[reader.FieldCount]; for (int i = 0; i < reader.FieldCount; i++) row[i] = reader.GetString(i); Console.WriteLine(string.Join("\t", row)); } reader.Close(); Console.WriteLine("続行するには何かキーを押してください"); Console.ReadKey(); //データ更新SQL command.Connection = connection; command.CommandText = UpdateSql; Console.WriteLine("ひろしの住所を目黒に変更しました"); command.ExecuteNonQuery(); Console.WriteLine("続行するには何かキーを押してください"); Console.ReadKey(); //データ削除SQL command.Connection = connection; command.CommandText = DeleteSql; Console.WriteLine("idが4のデータを削除しました"); command.ExecuteNonQuery(); } } catch (Exception e) { Console.WriteLine(e.Message); } Console.ReadKey(); } } }テーブル作成、データ挿入・抽出・更新・削除をキー入力で進めるプログラムです。
MySQLを確認しながら実行していく
MySQLのコマンドで確認しながら実行していきます。
Visual Studioで「デバッグ」から「デバッグなしで開始」を選択します。実行するとテーブル「test_table」が作成されます。
MySQLで確認します。MySQLUSE test_database;「test_database」にデータベースを切り替えます。
MySQLSHOW TABLES;「test_table」が作成されました。
コンソールに戻って進めます。データが挿入されます。
MySQLで確認します。MySQLSELECT * FROM test_table;挿入されました。
コンソールに戻って進めます。テーブルのデータを出力しました。
先ほどMySQLで確認したデータと同じです。
このまま進めます。「Hiroshi」の「address」が「Meguro」に変更されているか確認します
変更されました。
コンソールに戻って進めます。id = 4のレコードが削除されているか確認します。
削除されてます。
感想
今回はC#でMySQLを操作する基本を学びました。
確認しながら操作することで直感的に理解できたと思います。
- 投稿日:2021-02-27T22:34:27+09:00
phpMyAdmin�にアクセス拒否された時の対処法(を探してます)
phpMyAdminアクセスエラーに苦戦
プログラミング初心者なので、Udemyでphp/MySQL講座を学習中にphpMyAdminにアクセスを試みたところ、アクセス拒否、色々と対策を探した道のりをメモせず場当たり的になってしまっていたので、再度メモしながらやりたいと思います。
なお、本日時点(2021年2月27日)で対処方法が分からないので、実況中継的に更新していきます。
これ何?(HY000/1045) : Access denied
対処法を探しているところなので、タイムリーにメモをアップロードしていきます。
同じ処理を繰り返して無限ループしないように、ログとして。
早く解決したい。あまり関係ないですが、Udemyで「PHP+MySQL(MariaDB) Webサーバーサイドプログラミング入門」を学習中に躓き、解決できない状態ですでに2日かけてしまってます。
(「39.MySQLを使ってみよう」の中でphpMyAdminにアクセスが必要になりました。)環境
MacBook Pro (13-inch, 2017)
macOS Big Sur (Version11.1)
Homebrew 3.0.2
MySQL 8.0.23
MAMP6.3 ※アプリはProではなく無料版を使用
VScode 1.53.2エラー発生の順序
一連のアプリはインストール済みです。
1.MAMPアプリを起動し、「WebStart」からMAMP公式サイトに移動
2.MAMP公式サイト MySQLを展開
3.You can administer your MySQL databases withphpMyAdmin
(リンク)からphpMyAdminを開く
4.エラー発生エラー@phpMyAdminリンク先ページ.Error MySQL said:Documentation Cannot connect: invalid settings. mysqli_real_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES) phpMyAdmin tried to connect to the MySQL server, and the server rejected the connection. You should check the host, username and password in your configuration and make sure that they correspond to the information given by the administrator of the MySQL server.学習が全く進まなくて困ったので、ググりながら一つ一つ原因っぽいものを確認し、潰していきます。
原因と対策
原因候補1.MySQLが起動していない?もしくは起動できない?
ターミナルからMySQLを起動してみます。
terminal.-> % mysql -u root -p Enter password:問題なく起動できた。
結果.Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 42 Server version: 8.0.23原因候補2.パスワードが間違ってる?
一つ一つ手順を追っていきます。
①MySQLユーザーを確認
MySQL.terminal>mysql SELECT Host, User FROM mysql.user; +-----------+------------------+ | Host | User | +-----------+------------------+ | localhost | *** | | localhost | mysql.infoschema | | localhost | mysql.session | | localhost | mysql.sys | | localhost | root | +-----------+------------------+ 5 rows in set (0.00 sec)②パスワードかけてたかな、、mysql.userのパスワードハッシュを取得
MySQL.terminalmysql> SELECT Host, User, authentication_string FROM mysql.user;結果に
authentication_string
カラムが追加され、
パスワードがしっかりかかってル事がわかりました。
パスワード変更などしていないので、phpMyAdminにはまだログインできず。③権限がどうなってるのか、一応確認してみる
MySQL.terminalSHOW GRANTS FOR root@localhost;全権限がroot@localhostにありそうなことはわかりました。たぶん。
ただ、これも設定を何も変更していないのでログインできず。*パスワードハッシュ:ユーザーごとに設定してあるパスワードにハッシュ関数を適用してハッシュ値にしたものになります。
原因候補3.なぜかMAMP記載のパスワードがrootになってる
root@localhostには別のパスワードを設定しているはずだけど、MAMP公式サイトではパスワードが
root
になっている。これは何かおかしそうなのでとにかく変更してみる。パスワードを変更するには
config.inc.php
というファイルにアクセスする必要があるようです。①config.inc.phpを探す
このパス
/Applications/MAMP/bin/phpMyAdmin/config.inc.php
で辿り着けました。②パスワード変更
ファイルを開いて、パスワードの記載箇所を検索
(Command+F)
でpassword
と入力すると、ありました、僕の場合は中身を何もいじっていないファイルの92行目に見つかりました。config.inc.php$cfg['Servers'][$i]['password'] = 'root';やっぱ
root
になっとるやんけ・・・
ということで早速変更してみよう。アクセスできるかな。
上記のroot
をroot@localhostのパスワードに変更します。③MAMPサイトからphpMyAdminにリトライ
あれ?
MAMPサイトから↓が消えて、
”You can administer your MySQL databases withphpMyAdmin
(リンク)"代わりに↓が表示され、リンクすらなくなってしまった。MySQLは確かに動いてるのになぜ?
"You can administer your MySQL databases withphpMyAdmin (MySQL server not running)
."④一旦MySQLを停止して、phpMyAdminに再アクセスしてみる
パスワードをrootに戻し、
config.inc.php$cfg['Servers'][$i]['password'] = 'root';ターミナルからbrewコマンドでMySQLを停止
terminal.% brew services stop mysql@5.7この状態では、MAMPページにリンク表示されるものの、リンク先は変わらず
(HY000/1045) : Access denied
が表示されている。⑤試しにMySQLを停止したまま、パスワードだけを変えてトライしてみる
再度↓のパスワード('root')をroot@localhostのパスワードに変更し、
config.inc.php$cfg['Servers'][$i]['password'] = 'root';MAMPサイトをみてみると、↓のリンクがちゃんと出ている!!
You can administer your MySQL databases withphpMyAdmin
(リンク)
ということで、無事にphpMyAdminにアクセスできました!!無事、アクセスできました。
phpMyAdminの使い方はまだわかりませんが、ようやく進められます!
原因は分からず、、、ですが、対策はMySQL停止→パスワード変更→アクセス
という手順を踏んで、アクセスできました。
根本的な原因解決ができていないので心配ですが、とりあえず進められそうで・・・
ほんとよかったわ。↑では、解決してませんでした。
原因候補③の対策後、設定を変えずにMAMPサイトに戻ったところ、アクセスリンクが消えていて再アクセスできない状態になっていました。
これ↓が、
You can administer your MySQL databases withphpMyAdmin
(リンク)
こう。↓
"You can administer your MySQL databases withphpMyAdmin (MySQL server not running)
."また原因と対策探しをしていきたいと思います。
続・原因と対策
原因候補4。また追記します。
- 投稿日:2021-02-27T14:38:30+09:00
データベースのリネーム
- 投稿日:2021-02-27T12:13:47+09:00
【AWS】EC2インスタンスで作成したLaravelとRDS(MySQL)を連携させる方法
今回はAWSのRDS(MySQL)についてい書いていきます。
AWSにもDockerにも段々慣れてきたのですが、まだまだ知らない機能の方が多いですね。
さて、早速説明していきましょう。
はじめに
まず初めに前提条件として以下の条件を満たしている前提で話を進めめていきます。
・ECSで既にLaravelに関するコンテナの環境が構築済み
・EC2インスタンスへのSSH接続が可能上記2つの条件を満たしていな場合は下記の記事にすべてやり方が書いてあるので是非ご覧ください!
【AWS】AWS超初心者が、頑張ってDockerで作ったLaravelプロジェクトをECR、ECS、EC2を使ってAWS上で動かしてみた
RDSでMySQLのデータベースを作成
サービス検索欄から「RDS」と検索してください。
そして、「データベースの作成」をクリック。
するとこのような画面になると思います。
そしたら以下の条件を元にデータベースを作成してください。
データベースの作成方法 標準作成 エンジンのオプション MySQL バージョン 任意(大体8.*か5.7) テンプレート 本番稼働用 DBクラスター識別子 database-1 マスターユーザー名・マスターパスワード 任意 Virtual Private Cloud (VPC) 利用するEC2インスタンスと同じVPCを選択 パブリックアクセス可能 あり VPCセキュリティグループ 既存の選択 追加設定 最初のデータベース名(ローカル環境で使っていたデータベース名を入れるところ) 注意すべきポイントを2つ解説します。
1つ目は「Virtual Private Cloud (VPC)」です。
これは、書いてる通りEC2インスタンスと同じVPCを必ず選択してください。選択しないとEC2インスタンスへSSH接続したときにMySQLへアクセスできないのでくれぐれもご注意を。2つ目は追加設定の「最初のデータベース名」です。
「DBクラスター識別子」ではdatabase-1
と設定しましたが、これとは全く別物です。
例えばローカル環境でexample_database
という名前のデータベースを利用していた場合は、example_database
を「DBクラスター識別子」ではなく、「最初のデータベース名」に書いて下さい。また、ローカルでのデータベース名と本番環境用のデータベース名を分けたい場合でも「最初のデータベース名」に入力してください。
「データベースの作成」をクリックし、しばらくするとデータベースが作成されます。
SSH接続でMySQLのアクセス確認
次に、EC2インスタンスにSSH接続を行いMySQLへアクセスしてみます。
その前に先ほど作成したデータベースの画面へ行ってください。
「セキュリティ」の「VPCセキュリティグループ」をクリックしてください(sg-から始まるもの)
※注意 「ネットワーク」のVPCではございませんのでご注意を。
そしたらインバウンドルールの編集を行います。
SSH接続でMySQLにアクセスするために、利用するEC2インスタンスの「プライベート IPv4 アドレス」をコピーして、「すべてのトラフィック」で「IPv4アドレス/32」として追加してください。
例:10.0.0.0/32
また、LaravelからもMySQLのデータベースにアクセスできるようにタイプで「MYSQL/Aurora」を選んで「0.0.0.0/0」もしくはALBのセキュリティグループを選んでください。
そしてルールを保存してください。
これでSSH接続でMySQLにアクセスが可能になり、Laravelからもデータベースにアクセスすることができます。
試しにSSH接続でMySQLにアクセスしてみましょう!
ssh -i "C:~\zaemonia-ec2-key.pem" ec2-user@ec2-xxx.ap-northeast-1.compute.amazonaws.commysql -u{マスターユーザー名} -p -h{MySQLのエンドポイント} Enter password:{マスターパスワード} #パスワード入力は文字が出力されないのでコピペするのが良いかと無事MySQLにアクセス出来たら成功です!
これでアクセスできない場合は以下の事項を再確認してください。
・マスターユーザー名、マスターパスワード
・セキュリティグループのインバウンドルールこれら2つがしっかりと合っていれば必ずアクセスできます。
諦めずに頑張りましょう!!
以上、「【AWS】EC2インスタンスで作成したLaravelとRDS(MySQL)を連携させる方法」でした!
良ければ、LGTM、コメントお願いします。
また、何か間違っていることがあればご指摘頂けると幸いです。
他にも初心者さん向けに記事を投稿しているので、時間があれば他の記事も見て下さい!!
あと、最近「ココナラ」で環境構築のお手伝いをするサービスを始めました。
気になる方はぜひ一度ご相談ください!
Thank you for reading
- 投稿日:2021-02-27T11:50:52+09:00
ローカル 環境開発 Ruby on Railsの環境構築方法
はじめに
ローカル環境でRailsの環境構築ができるようになり、http://localhost:3000/で以下の表示がされるとゴールです。
初めて、ローカル環境で構築しましたので、その方法を記載します。
到達点
以下の1点を達成する
・http://localhost:3000/ で上記の図を表示する仕様
初期仕様
・mac
・Ruby(2.6.3)今回インストールするバージョン
・Ruby on Rails (6.1.1)
・MySQL (8.0.23)
・Homebrew (2.7.6)流れ
① Homebrewインストール
② bundlerインストール
③ MySQLインストール
④ railsインストール
⑤ アプリケーションの新規作成
⑥ サーバー立ち上げ① Homebrewインストール
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"ターミナルで上記のコマンドでHomebrewインストールをします.
brew -vインストールされたか確認します
② bundlerインストール
gem install bundlerターミナルで上記のコマンドでbundlerをインストールします
③ MySQLインストール
brew install mysqlターミナルで上記のコマンドでMySQLをインストールします
brew info mysqlインストールされたか、バージョンも含め確認します
MySQLの自動起動設定
brew services start mysqlこのコマンドでmacが再起動すると、自動的にSQLが再起動されます
MySQLパスワード設定
MySQLはHomebrewでインストールすると、パスワードなしでしようできるため、
パスワードありにしたい場合、下記のコマンドをしますmysql_secure_installation
④ railsインストール
gem install railsターミナルで上記のコマンドでRailsをインストールします
rails -vインストールされたか、バージョンも含め確認します
⑤ アプリケーションの新規作成
rails new app -d mysql rails new app *これでもできるかもrailsはmysqlがデフォルトでないため、
-d mysql
を使いましたが必要ないかもしれません。
このコマンドで、アプリケーションの新規フォルダを作成します。
数分かかります。
⑥ サーバー立ち上げ
cd app rails db:create *データベースがないとエラーになりました rails sappフォルダに移動し,サーバーを立ち上げます。
http://localhost:3000/に以下の画面が表示されれば、成功です!!
参考記事
VS codeの初期設定とRuby on Railsの環境設定 環境構築
ActiveRecord::NoDatabaseError: Unknown database 'アプリ名_development' 解決策
- 投稿日:2021-02-27T11:50:52+09:00
ローカル環境開発 Ruby on Railsの環境構築方法
はじめに
ローカル環境で、Railsの環境構築ができるようになり、http://localhost:3000/のurlから以下の表示がされるとゴールです。
初めて、ローカル環境で構築しましたので、その方法を記載します。
到達点
以下の1点を達成する
・http://localhost:3000/ で上記の図を表示する仕様
初期仕様
・mac
・Ruby(2.6.3)今回インストールするバージョン
・Ruby on Rails (6.1.1)
・MySQL (8.0.23)
・Homebrew (2.7.6)流れ
① Homebrewインストール
② bundlerインストール
③ MySQLインストール
④ railsインストール
⑤ アプリケーションの新規作成
⑥ サーバー立ち上げ① Homebrewインストール
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"ターミナルで上記のコマンドでHomebrewインストールをします.
$ brew -vインストールされたか確認します
② bundlerインストール
$ gem install bundlerターミナルで上記のコマンドでbundlerをインストールします
③ MySQLインストール
$ brew install mysqlターミナルで上記のコマンドでMySQLをインストールします
$ brew info mysqlインストールされたか、バージョンも含め確認します
MySQLの自動起動設定
$ brew services start mysqlこのコマンドでmacが再起動すると、自動的にSQLが再起動されます
MySQLパスワード設定
MySQLはHomebrewでインストールすると、パスワードなしでしようできるため、
パスワードありにしたい場合、下記のコマンドをします$ mysql_secure_installation
④ railsインストール
$ gem install railsターミナルで上記のコマンドでRailsをインストールします
$ rails -vインストールされたか、バージョンも含め確認します
⑤ アプリケーションの新規作成
$ rails new app -d mysql $ rails new app *これでもできるかもrailsはmysqlがデフォルトでないため、
-d mysql
を使いましたが必要ないかもしれません。
このコマンドで、アプリケーションの新規フォルダを作成します。
数分かかります。
⑥ サーバー立ち上げ
$ cd app $ rails db:create *データベースがないとエラーになりました $ rails sappフォルダに移動し,サーバーを立ち上げます。
http://localhost:3000/に以下の画面が表示されれば、成功です!!
参考記事
VS codeの初期設定とRuby on Railsの環境設定 環境構築
ActiveRecord::NoDatabaseError: Unknown database 'アプリ名_development' 解決策