BG Development


  Reply to this topicStart new topicStart Poll

> Връзка към MySql Database проблем! (asp.net), За начинаещи
berge
Публикувано на: 28-11-2017, 11:25
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 8
Регистриран на: 30.10.17



Направих код за запис във база данни на C# чрез VS, който работи перфектно на локалния сървър, но качен на хостинга дава следната грешка: "No such host is known

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Net.Sockets.SocketException: No such host is known"

Кода е:

webconfig:

<connectionStrings>
<add name="WebAppConnString"
connectionString="Server=localhost:3306; User ID=root;Password=86753421ee;Database=tutdb;"
providerName="MySql.Data.MySqlClient"/>
</connectionStrings>


C# на бутона за регистриране:
private void registerUser()
{

String connString = System.Configuration.ConfigurationManager.ConnectionStrings["WebAppConnString"].ToString();

conn = new MySql.Data.MySqlClient.MySqlConnection(connString);

conn.Open();

queryStr = "";

queryStr = "INSERT INTO tutdb.users (fName, lName, phone, username, password)" + " VALUES('" + fName.Text + "', '" + lName.Text + "', '" + phone.Text + "', '" + username.Text + "', '" + password.Text + "')";

cmd = new MySql.Data.MySqlClient.MySqlCommand(queryStr, conn);

cmd.ExecuteReader();

conn.Close();

Response.Redirect("ok.aspx");

}

Пробвах в конфиг файла замяна на името на сървърса с конкретно IP, "Server:localhost; Port:3306;", но нищо не сработва. Знае ли някой къде бъркам? Благодаря!
PMEmail Poster
Top
NPavlov
Публикувано на: 28-11-2017, 11:35
Quote Post



Име:
Група: Потребител
Ранг: Старо куче

Мнения: 806
Регистриран на: 03.12.08



Естествено, че имаш проблем - ползваш MySQL :-)

Сега сериозно, проблемът ти е конфигурацията:
CODE
Server=localhost:3306;


Много се съмнявам, че на хостинга базата е на localhost и на същия порт.
PMEmail Poster
Top
berge
Публикувано на: 28-11-2017, 11:59
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 8
Регистриран на: 30.10.17



Това и на мен ми направи впечатление, но на Connection Info в контрол панела ми извежда това:
Connection Information for tutdb
You can use these database connection details, for example, when you are asked to specify ones during installation of a web app.

Host
localhost:3306
Database name
tutdb
User name
root
Password
******

Пробвах и със "Server=91.215.216.112", което го дават като IP на сървъра и пак не сработва..

Това мнение е било редактирано от berge на 28-11-2017, 12:04
PMEmail Poster
Top
thrawn
Публикувано на: 28-11-2017, 13:02
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1041
Регистриран на: 17.01.17



Съобщението за грешка е, че няма такъв хост. Това няма отношение към услугите на него - дъни се ДНС-ът.
Пробвай със 127.0.0.1
PMEmail Poster
Top
berge
Публикувано на: 28-11-2017, 14:06
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 8
Регистриран на: 30.10.17



С този работи само при мен на локала, там ми връща:
Object reference not set to an instance of an object.
PMEmail Poster
Top
berge
Публикувано на: 28-11-2017, 14:17
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 8
Регистриран на: 30.10.17



Да, въпросът явно е къде се виждат настройките за връзка към база данни на хостинг?..
PMEmail Poster
Top
thrawn
Публикувано на: 28-11-2017, 14:50
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1041
Регистриран на: 17.01.17



Ами отвори една конзола и тествай де. Това windows потребителите сте безпомощни ако няма на какво да кликнете.

netstat
ping localhost
mysql -h localhost -uroot -p
PMEmail Poster
Top
berge
  Публикувано на: 02-12-2017, 10:15
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 8
Регистриран на: 30.10.17



Да, ако няма на кво да пишем също сме безпомощни, но не това беше въпроса. Оказа се в крайна сметка, че сървъра си е точно localhost, а порт не ми и трябва, м/д 3306 се води дифоултния на mySQL, но на този хостинг хората си казаха, че не ми трябва изрично да го въвеждам. Проблема е в C# кода. Изпълних го по друг туториал, където се въвежда и ID-то, въпреки, че в ДБ е Auto Increase, оставя се празно, но трябва да присъства в заявката! Проблема е решен, сега записва перфектно, ето работещия код за следващия клет човечец, изпаднал в същата нищета:


myDB_1.aspx :

HTML
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="myDB_1.aspx.cs" Inherits="myDB_1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
      <title>Register</title>
      <meta charset="utf-8" />
</head>
<body>
      <form id="form1" runat="server">

            <table>
                  <tr>
                        <td>Username</td>
                        <td>
                              <asp:TextBox ID="nameTxt" runat="server" /></td>
                  </tr>
                  <tr>
                        <td>Password</td>
                        <td>
                              <asp:TextBox ID="passTxt" runat="server" /></td>
                  </tr>
            </table>
            <asp:Button ID="registerBtn" Text="Register" OnClick="RegisterF" runat="server" />
            <br />
            <asp:Button ID="loginBtn" Text="Login" OnClick="LoginF" runat="server" />
            <br />
            <asp:Button ID="viewBtn" Text="Register 2" OnClick="RegisterF_2" runat="server" />
            <br />
            <br />
            <asp:Label ID="msg" runat="server" />
            
      </form>
</body>
</html>



myDB_1.aspx.cs :

HTML
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MySql.Data.MySqlClient;
using System.Configuration;
using System.Data;

public partial class myDB_1 : System.Web.UI.Page
{
      private MySqlConnection conn;
      private string connStr;

      protected void Page_Load(object sender, EventArgs e)
      {

      }

      // Register
      public void RegisterF(object sender, EventArgs e)
      {
            if (nameTxt.Text != "" && passTxt.Text != "")
            {
                  connStr = $"SERVER=localhost;DATABASE=tut;UID=root;PASSWORD=;CHARSET=utf8;";
                  conn = new MySqlConnection(connStr);

                  if (OpenConnection())
                  {
                        GoRegister(nameTxt.Text, passTxt.Text);
                  }
                  else
                  {
                        conn.Close();
                  }
            }
            else
            {
                  msg.Text = "<p style='color:#a00;'>Кво да регистрирам, попни сичко!</p>";
            }
      }

      private bool GoRegister(string name, string pass)
      {
            [B]string query = $"INSERT INTO users (id, username, password) VALUES('', '{name}', '{pass}');";[/B]

            try
            {
                  MySqlCommand cmd = new MySqlCommand(query, conn);
                  cmd.ExecuteNonQuery();
                  conn.Close();
                  msg.Text = "<p style='color:#0c0;'>Record success!</p>";
                  return true;
            }
            catch (Exception ex)
            {
                  conn.Close();
                  msg.Text = "<p style='color:#a00;'>Go Register sduha: " + ex.ToString() + "</p>";
                  return false;
            }
      }

      // Login
      public void LoginF(object sender, EventArgs e)
      {
            connStr = $"SERVER=localhost;DATABASE=tut;UID=root;PASSWORD=;CHARSET=utf8;";
            conn = new MySqlConnection(connStr);

            if (IsLogin(nameTxt.Text, passTxt.Text))
            {
                  msg.Text = "<p style='color:#0c0; '>Достъп разрешен!</p>";
                  conn.Close();
            }
            else
            {
                  msg.Text = "<p style='color:#c00; '>Достъп отказан!</p>";
                  conn.Close();
            }
      }

      private bool IsLogin(string name, string pass)
      {
            string query = $"SELECT * FROM users WHERE username='{name}' AND password='{pass}';";

            try
            {
                  if (OpenConnection())
                  {
                        MySqlCommand cmd = new MySqlCommand(query, conn);
                        MySqlDataReader reader = cmd.ExecuteReader();

                        if (reader.Read())
                        {
                              reader.Close();
                              conn.Close();
                              return true;
                        }
                        else
                        {
                              reader.Close();
                              conn.Close();
                              return false;
                        }
                  }
                  else
                  {
                        conn.Close();
                        return false;
                  }
            }
            catch (Exception ex)
            {
                  conn.Close();
                  msg.Text = "Чушки: " + ex.ToString();
                  return false;
            }
      }


      // Register 2
      public void RegisterF_2(object sender, EventArgs e)
      {
            conn = new MySqlConnection(@"Data Source=localhost;port=3306;Initial Catalog=tut;User Id=root;password='';Charset=utf8;");

            try
            {
                  conn.Open();

                  MySqlCommand cmd = conn.CreateCommand();
                  cmd.CommandType = CommandType.Text;
                  cmd.CommandText = "insert into users values('', '" + nameTxt.Text + "', '" + passTxt.Text + "')";
                  cmd.ExecuteNonQuery();

                  conn.Close();
                  msg.Text = "<p style='color:#0c0; '>Record 2 success!</p>";
            }
            catch (Exception ex)
            {
                  conn.Close();
                  msg.Text = "<p style='color:#c00; '>Record 2 failed!</p>";
            }
      }

      
      // IF open connection
      private bool OpenConnection()
      {
            try
            {
                  conn.Open();
                  return true;
            }
            catch (Exception ex)
            {
                  conn.Close();
                  msg.Text = "<p style='color:#c00;'>Чушки да ти отворя connection-a:<br/><br/>" + ex.ToString() + "</p>";
                  return false;
            }
      }
}


Както се вижда има 2 варианта за запис в ДБ и двата работят перфектно и горе на хостинга, но най-ме изкефи самата структура на кода с булините и try/catch, където лесно се лови всяка грешка по пътя в изпълнението на заявката. Ако на някой не му работи, да пише. Благодаря за отговорите!

PMEmail Poster
Top
thrawn
Публикувано на: 02-12-2017, 13:02
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1041
Регистриран на: 17.01.17



Браво на теб. Ама преди да помагаш на други потребители се опитай да разбереш защо в единия случай ти се отказва достъп до базата данни а в другия не.

Та за да не губиш време, разликата е в това, че потребителят root ти е без парола, а ти си се опитвал да въвеждаш някаква.
PMEmail Poster
Top
berge
Публикувано на: 02-12-2017, 13:13
Quote Post



Име:
Група: Потребител
Ранг: Новопостъпил

Мнения: 8
Регистриран на: 30.10.17



Не, то първия код е от хоста, а втория от локала, затова са така. Основния проблем беше, че в заявката не присъстваше графа id, макар и празна, т.е. заявката трябва да съдържа Всички колонки от Базата данни, независимо дали са празни или не и в същата последователност Задължително!
Иначе да, за да работи кода, индивидуално трябва да се въведат всички данни от:

HTML
connStr = $"SERVER=localhost;DATABASE=tut;UID=root;PASSWORD=;CHARSET=utf8;";


За SERVER, може да оставите localhost, или да питате админите на хоста, останалото попълвате според вашите настройки, a "CHARSET=utf8" е за кирилицата.

Това мнение е било редактирано от berge на 02-12-2017, 13:18
PMEmail Poster
Top
0 потребители преглеждат тази тема в момента (0 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2015 | BG Development | All Rights Reserved
RSS 2.0