2017-05-17 3 views
0

Also für ein Schulprojekt arbeite ich an einer C# -Anwendung, die Informationen in die Datenbank setzen kann, so können wir es in unserer Website ausgeben .. Und ich frage mich, ob es möglich war, eine zu verwenden Online-Datenbank für sie, ich diese Website nur für sie verwendet: http://www.freesqldatabase.com/C# Verbindung mit Online-Datenbank

Error: "Reading from the stream has failed" on adapter.fill(table) 

Dies ist die MySqlConnection string:

MySqlConnection connection = new MySqlConnection("datasource=sql11.freesqldatabase.com;port=3306;Initial Catalog='sql11174958';username=Username;password=Password"); 
      MySqlCommand command; 

das ist mein C# -Code ich verwendet:

using MySql.Data.MySqlClient; 
using MySql.Data; 
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace Database 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     MySqlConnection connection = new MySqlConnection("datasource=sql11.freesqldatabase.com;port=3306;Initial Catalog='sql11174958';username=Username;password=Password"); 
     MySqlCommand command; 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      populateDGV(); 
     } 

     public void populateDGV() 
     { 
      // populate the datagridview 
      string selectQuery = "SELECT * FROM park"; 
      DataTable table = new DataTable(); 
      MySqlDataAdapter adapter = new MySqlDataAdapter(selectQuery, connection); 
      adapter.Fill(table); 
      dataGridView_USERS.DataSource = table; 
     } 

     private void dataGridView_USERS_MouseClick(object sender, MouseEventArgs e) 
     { 
      try 
      { 
       txbParkID.Text = dataGridView_USERS.CurrentRow.Cells[0].Value.ToString(); 
       txbParkNaam.Text = dataGridView_USERS.CurrentRow.Cells[1].Value.ToString(); 
       txbLocatie.Text = dataGridView_USERS.CurrentRow.Cells[2].Value.ToString(); 
       txbOpeningsDagen.Text = dataGridView_USERS.CurrentRow.Cells[3].Value.ToString(); 
       txbPrijzen.Text = dataGridView_USERS.CurrentRow.Cells[4].Value.ToString(); 
       txbLeeftijden.Text = dataGridView_USERS.CurrentRow.Cells[5].Value.ToString(); 
       txbTags.Text = dataGridView_USERS.CurrentRow.Cells[6].Value.ToString(); 
       rtbBeschrijving.Text = dataGridView_USERS.CurrentRow.Cells[7].Value.ToString(); 
      } 
      catch 
      { 
       MessageBox.Show("No cell selected."); 
      } 

     } 

     public void openConnection() 
     { 
      if(connection.State == ConnectionState.Closed) 
      { 
       connection.Open(); 
      } 
     } 

     public void closeConnection() 
     { 
      if(connection.State == ConnectionState.Open) 
      { 
       connection.Close(); 
      } 
     } 

     public void executeMyQuery(string query) 
     { 
      try 
      { 
       openConnection(); 
       command = new MySqlCommand(query,connection); 

       if(command.ExecuteNonQuery() == 1) 
       { 
        MessageBox.Show("Query Executed"); 
       } 

       else 
       { 
        MessageBox.Show("Query Not Executed"); 
       } 

      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      }finally 
      { 
       closeConnection(); 
      } 
     } 

     private void BTN_INSERT_Click(object sender, EventArgs e) 
     { 
      string insertQuery = "INSERT INTO park(ParkNaam, ParkLocatie, ParkOpeningsDagen, ParkOpeningsTijden, ParkPrijzen, ParkLeeftijden, ParkTags, ParkBeschrijving) VALUES('" +txbParkNaam.Text+ "','" +txbLocatie.Text+ "','" +txbOpeningsDagen.Text + "','" +txbOpeningsTijden.Text+ "','" +txbPrijzen.Text+ "','" +txbLeeftijden.Text+ "','" +txbTags.Text+ "','" +rtbBeschrijving.Text+ "')"; 
      executeMyQuery(insertQuery); 
      populateDGV(); 
     } 

     private void BTN_UPDATE_Click(object sender, EventArgs e) 
     { 
      string updateQuery = "UPDATE park SET ParkNaam='" +txbParkNaam.Text+ "',ParkLocatie='" +txbLocatie.Text+ "',ParkOpeningsDagen='" +txbOpeningsDagen.Text+ "',ParkOpeningsTijden='" +txbOpeningsTijden.Text+ "',ParkPrijzen='" +txbPrijzen.Text+ "',Parkleeftijden='" +txbLeeftijden.Text+ "',ParkTags='" +txbTags.Text+ "',ParkBeschrijving='" +rtbBeschrijving.Text+ "' WHERE ParkID =" + int.Parse(txbParkID.Text); 
      executeMyQuery(updateQuery); 
      populateDGV(); 
     } 

     private void BTN_DELETE_Click(object sender, EventArgs e) 
     { 
      string deleteQuery = "DELETE FROM park WHERE ParkID = " + int.Parse(txbParkID.Text); 
      executeMyQuery(deleteQuery); 
      populateDGV(); 
     } 
    } 
} 
+2

Also, was ist das Problem? – Alex

+0

Ich bekomme einen Fehler, der sagt "Lesen aus dem Stream ist fehlgeschlagen" auf adapter.fill (Tabelle) – Ruitjes

+0

Während Sie dabei sind, lesen Sie bitte auf "sql-Injektion" –

Antwort

0

Ich habe das Problem, Sie öffnen die Verbindung, aber ich sehe nicht, wo Sie sie schließen. Sobald Sie eine Verbindung zu MySQL geöffnet haben, sollten Sie sie nach der Verwendung schließen.

In diesem Fall sind die Verbindungen im Remote-Server offen und nicht geschlossen. Als ob der Remote-Server frei ist, ist die Anzahl der erlaubten Verbindungen begrenzt. Sie sollten geöffnete Verbindungen schließen, indem Sie sich an die MySQL-Dienstanbieter wenden, dann wird nur der Fehler entfernt und schließen Sie die Verbindungen nach der Verwendung, sonst tritt das Problem erneut auf.

+0

Bekam die gleiche Fehlermeldung aber woanders: https://i.gyazo.com/3221432becebd4264f078223e0450515.png – Ruitjes

+0

Antwort aktualisiert. –