Qery futása után nem zárható be a form

Qery futása után nem zárható be a form
2014-08-11T20:55:24+02:00
2014-08-12T19:21:22+02:00
2022-12-01T11:30:41+01:00
lor
Üdv!

Minden gyakorlati haszon nélkül, pusztán szórakozás céljából létrehoztam egy formot, amin a következő kontrollok kontrollok vannak: egy darab combobox, amit hozzákötöttem egy SQL táblához, az tölti fel tartalommal, illetve két datagridview, amit egy másik táblán lefuttatott query tölt fel tartalommal (a második itt nincs használva). A combobox a query paraméterezéséhez kell:

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; namespace sziták { public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void Form2_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'lorDataSet.Megrendelok' table. You can move, or remove it, as needed. this.megrendelokTableAdapter.Fill(this.lorDataSet.Megrendelok); // TODO: This line of code loads data into the 'lorDataSet.Szitak' table. You can move, or remove it, as needed. this.szitakTableAdapter.Fill(this.lorDataSet.Szitak); } private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e) { string form2connectionstring=@"Data Source=lor_desk_w8-1\smd;Initial Catalog=lor;Integrated Security=True"; SqlConnection form2connection=new SqlConnection(form2connectionstring); if(form2connection.State==ConnectionState.Closed) { form2connection.Open(); } // Create a String to hold the query. string query="SELECT MunkaNeve, SzitaNeve, KetOldalas, OlomMentes FROM Szitak WHERE MegrendeloAzonosito LIKE '"+comboBox1.SelectedValue.ToString()+"'"; // Create a SqlCommand object and pass the constructor the connection string and the query string. SqlCommand queryCommand=new SqlCommand(query, form2connection); // Use the above SqlCommand object to create a SqlDataReader object. SqlDataReader queryCommandReader=queryCommand.ExecuteReader(); // Create a DataTable object to hold all the data returned by the query. DataTable dataTable=new DataTable(); // Use the DataTable.Load(SqlDataReader) function to put the results of the query into a DataTable. dataTable.Load(queryCommandReader); dataGridView2.DataSource=dataTable; //closing the connection to the sql server form2connection.Close(); this.Text=form2connection.State.ToString(); } private void button1_Click(object sender, EventArgs e) { Close(); } } }
Ok, nem az igazi, de csak játék. Viszont furcsán viselkedik:

Ha megnyitom a formot, majd egyből bezárom, minden rendben van, szépen becsukódik. Viszont ha a combobox lenyitásával futtatom a lekérdezést (ami működik, megjelenik az elvárt adat), már nem tudom sem a gombra kattintva, sem az ablak jobb felső részén lévő x-el bezárni a formot. Csak úgy léphetek ki, (leszámítva az erőszakos megoldásokat, mint feladatkezelő,) ha bezárom a program "fő" ablakát, a form1-et. A form nem "fagy meg". Mozgatható, a rajta lévő kontrollok működnek. Épp csak bezárni nem sikerül.

Vajh mi történik? Mit csináltam?


lor
Mutasd a teljes hozzászólást!
Ok, futtasd a progid debug-gal, s tegyél egy töréspontot (breakpoint) pl. ide:

if(form2connection.State==ConnectionState.Closed)
s kövesd le lépésenként, vagy nézd meg, hányszor kerül e sorra a vezérlés..
Mutasd a teljes hozzászólást!

  • adatbázis timeoutra vár.
    Mutasd a teljes hozzászólást!
  • Köszi. Sejtettem, de érteni nem értem. A lekérdezés sikeresen lefut, a kapcsolatot egyből bontom. Akkor mire vár még?
    Mutasd a teljes hozzászólást!
  • comboBox1_SelectionChangeCommitted

    Bocsi, de miért itt fut a query?
    Mutasd a teljes hozzászólást!
  • Semmi oka. Csak játék. De az egész kód nem funkcionális, csak kíváncsi voltam, mi történik, ha ezt csinálom. Nem vagyok programozó, csak egy nagyranőtt kétéves, aki nem csak FPS-sel, hanem Visual Studioval (is) játszik

    Valójában az érdekelt, tudom é ilyen (vagy hasonló) módszerrel módosítani a query textet. Előbb/utóbb szépen szét lesz szedve a dolog, ahogy szép lassan megtanulom, mit/hogyan, a query szövegét is jobban módosíthatóvá szeretném tenni, illetve normálisan megcsinálni, és a lekérdezés végrehajtását elköltöztetni egy button_click eseménybe.

    Ha az sem lesz jó, és magamtól nem jövök rá, megint kérdezni fogok.
    Mutasd a teljes hozzászólást!
  • Ok, futtasd a progid debug-gal, s tegyél egy töréspontot (breakpoint) pl. ide:

    if(form2connection.State==ConnectionState.Closed)
    s kövesd le lépésenként, vagy nézd meg, hányszor kerül e sorra a vezérlés..
    Mutasd a teljes hozzászólást!
  • Ok, tehát lássuk, jól értem e, amit mondasz: az adatbázis-kapcsolat minden alkalommal megnyitásra, majd újra bezárásra kerül, amint lenyitom a comboboxot. És ha N alkalommal váltom ki az eseményt, N* kell "végigülni" a timeoutot, ami azt hiszem 30 sec. alapértelmezetten? Nos, nyilván van jobb módja ennek. Például ha a kapcsolat nyitását átrakom a form load eseményébe, a zárást a form zárásába? Költői kérdés volt... Ott a pont. De valamit tutira varázsolni kell majd, hogy ez így működjön, különben azt fogja mondani, hogy a connection ebben a kontextusban nem létezik, vagy valami effélét.

    Rendben, ezen gondolatmenet mentén haladok. Ha valami bajom lesz, vinnyogok.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd