以前、「C#でログインする方法」という質問を投稿した者です。
ログインできるかの確認のために試しに海外のサイト(https://www.csharp-console-examples.com/winform/create-simple-login-form-in-c-with-mysql/)のコードを入力してみたところ、
C#
1MySql.Data.MySqlClient.MySqlException: 'Unable to connect to any of the specified MySQL hosts.'
というエラーが出てログインができませんでした。
以下がコードです。(一部改変しています。)
改変した部分は、データベース名、データベースのユーザー名、データベースのパスワード、テーブルの名前です。
C#
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10using MySql.Data; 11using MySql.Data.MySqlClient; 12 13namespace Software 14{ 15 public partial class Form2 : Form 16 { 17 MySqlConnection con; 18 MySqlCommand cmd; 19 MySqlDataReader dr; 20 public Form2() 21 { 22 InitializeComponent(); 23 con = new MySqlConnection("Server=localhost;Database=Example;user=Example;Pwd=Dance;SslMode=none"); 24 25 } 26 27 private void pictureBox3_Click(object sender, EventArgs e) 28 { 29 string user =email.Text; 30 string pass = password.Text; 31 cmd = new MySqlCommand(); 32 con.Open(); 33 cmd.Connection = con; 34 cmd.CommandText = "SELECT * FROM userDeta where usr='" + email.Text + "' AND pwd='" +password.Text + "'"; 35 dr = cmd.ExecuteReader(); 36 if (dr.Read()) 37 { 38 MessageBox.Show("Login sucess Welcome"); 39 } 40 else 41 { 42 MessageBox.Show("Invalid Login please check username and password"); 43 } 44 con.Close(); 45 } 46 } 47 }
コードやエラーはマークダウンのcode機能を利用してご提示ください。
https://teratail.com/questions/238564
>(一部改変しています。)
どの部分を改変したのか書かないと分かりません。
前の質問で言及していますが、調べてないのでしょうか。
https://teratail.com/questions/324701
m.ts10806
2021/02/26 16:28
基本レンタルサーバーのデータベースはサーバー内からしかアクセスできない制限があったはずです。調べてみてください。
DBとのやり取りはAPI用意してC#側から叩くようにするしかないですね。
調べてみましたが、情報が少なく、よく分かりませんでした。
ではMySQLが入ってるサーバーの提供元に問い合わせてください。
了解しました。
接続文字列がlocalhostになってますけど。丸写しするだけでなくそれなりに意味を考えないとダメです。そうでないと、回答いただいても恐らく理解できません。
なるほど。確かにそうですね。
私が思うに、エラーに「対象のコンピューターによって拒否されたため、接続できませんでした。」というのがあったので、恐らくレンタルサーバー(XREA)から接続を拒否されているのではないかと推測しています。
一応、XREAに問い合わせてみます。
先にしたコメントの通り、普通、許可されてません。
自身がサーバー運営の立場になってみればわかります。
なるほど。普通は許可されていないんですね。
確かに考えてみればそうでした。
「だから言ったのに」とこの質問を見た時点で私は思ってます。
別の「望ましい」やり方もたくさん言及したはずですが、押し通されるなら、「まぁそうなるよね」です。
別のやり方というのは、APIのことですか?
もしそうなら、調べてもあまり分かりませんでした。
今回は諦めます。
理由は、セキュリティが危険かもしれないと思いましたし、私の技術ではまだまだだからです。
本当に申し訳ございません。
教えてくださり、ありがとうございました。
>調べてもあまり分かりませんでした。
調べたところで実際に組んでみないと分かるようにはなりません。
APIってすごく要約すると「受け取った情報を元にて既定の処理をして既定の情報を返す機能」のことなので、
PHPで組まれたであろう登録機能とかも一緒ですよ。
フォームから送られた情報を元に登録するように組んだわけですよね。
その「送られる情報」ってフォームからでないと処理できないか?考えてみてください。
既定の情報が外から送られてきても同じようにできる。つまり単体で動作できる機能になっているということです。
という観点だと、Ajaxによる非同期通信なんて、まさに画面からAPIを利用しているということと同義です。
なるほど。確かにそうですね。
あと、言うのを忘れていましたが、PHPからだとログインすることができました。
ですから、レンタルサーバーだと直にアクセスできるのはサーバー内からだけだと以前から。
自由にしたいならVPSとかセキュリティ設定も自由にできる環境を借りることですね。
インフラ要素も強いのでさらに広範囲のスキルが必要です。
それが難しいと思うのなら、ルール内で出来る方法を考えるしかありません。
はい。すみません。
今度、ラズベリーパイを買って、Webサーバーを構築してやってみようと思います。
C#のプログラムを作っている開発環境にデータベースサーバーとWEBサーバーをインストールして学習すれば良いのでは。
とりあえずこの質問どうするか決めてください。
具体的な解決策を求めるのか、自分で解決してしめるか、適切ではないと削除するのか
確かにそうですね。
ApacheとかMySqlとかを入れてやってみます。
解決済みにします。
回答1件
あなたの回答
tips
プレビュー