Forum » Programiranje » Napaka pri povezavi z bazo - c#
Napaka pri povezavi z bazo - c#
KernelPanic ::
Spostovani!
Spet bi prosil za pomoc, za katero se vam vnaprej zahvaljujem. Namrec, probam se povezati na tabelo, ki sem jo skreiral, da iz nje preberem dolocene podatke. Tukaj je koda:
S spostovanjem,
M.
Spet bi prosil za pomoc, za katero se vam vnaprej zahvaljujem. Namrec, probam se povezati na tabelo, ki sem jo skreiral, da iz nje preberem dolocene podatke. Tukaj je koda:
private static bool dbAccuLoadTableExists(string strTableName, dsPinusTableAdapters.ACCULOAD_TRANSACTIONSTableAdapter ta) { bool bSuccess = false; // function returns this flag using (SqlConnection connection = new SqlConnection(ta.Connection.ConnectionString)) { string strQueryCheckTable = String.Format( "IF OBJECT_ID('{0}', 'U') IS NOT NULL SELECT 'true' ELSE SELECT 'false'", strTableName); SqlCommand command = new SqlCommand(strQueryCheckTable, ta.Connection); command.CommandType = CommandType.Text; try { connection.Open(); bSuccess = Convert.ToBoolean(command.ExecuteScalar()); } catch (Exception ex) { Console.WriteLine(ex.Message); } connection.Close(); } // using return bSuccess; } // dbAccuLoadTableExistsOb klicu te funkcije mi try-catch blok vrze exception z vsebino:
ExecuteScalar requires an open and available Connection. The connection's current state is closed.Torej, ce odprem povezavo do baze, zakaj mi jo server takoj zapre in ko probam pognati query, seveda pride do napake, ker je connection down. Pogledal sem nastavitve serverja, na katerega se povezujem in prejemanje eksternih povezav je VKLOPLJENO. Na racunalniku, kamor se konektam, je izklopljen firewall, tako da res ne vem, kaj bi se bilo. Mi lahko prosim pomagate z kaksnim nasvetom?
S spostovanjem,
M.
Mitja Bonča ::
Očitno ni odprete povezave.
Probaj tako:
Če uporablajš "using" keyword, ni potrebno zapirati povezave, ker se samodejno zapre ob izstopu in using bloka.
Probaj tako:
private static bool dbAccuLoadTableExists(string strTableName, dsPinusTableAdapters.ACCULOAD_TRANSACTIONSTableAdapter ta) { bool bSuccess = false; // function returns this flag using (SqlConnection connection = new SqlConnection(ta.Connection.ConnectionString)) { string strQueryCheckTable = String.Format( "IF OBJECT_ID('{0}', 'U') IS NOT NULL SELECT 'true' ELSE SELECT 'false'", strTableName); SqlCommand command = new SqlCommand(strQueryCheckTable, connection); //Spremenil tukaj! command.CommandType = CommandType.Text; connection.Open(); try { bSuccess = Convert.ToBoolean(command.ExecuteScalar()); } catch (Exception ex) { Console.WriteLine(ex.Message); } } return bSuccess; } //
Če uporablajš "using" keyword, ni potrebno zapirati povezave, ker se samodejno zapre ob izstopu in using bloka.
KernelPanic ::
UUU hvala, zdej pa dela!!!! Hvala!!!
Samo se nekaj, zakaj je pa ta metoda staticna? Nasel sem jo preko googla ...
Samo se nekaj, zakaj je pa ta metoda staticna? Nasel sem jo preko googla ...
Zgodovina sprememb…
- spremenil: KernelPanic ()
dolenc ::
Da jo lahko direktno kličeš imeRazreda.Funkcija(), ne rabiš objekta delat, rabi pa ne biti statična, odvisno kaj potrebuješ. Pa pri try/catch dodajaj zraven še finally kjer zapiraš konekcijo, dobra praska, če ti kje kdaj kej odleti :)
Mitja Bonča ::
static pomeni, da če imaš to metodo v nekem drugem razredu, ti ni potrebno delati nove instance tega razreda, ampak dostopaš do te metode v tem razredu kar direktono:
To je en tak simple primer, zakaj je dobro uporablajti static razrede in metode.
V primeru da metoda "AliJeToStevilo" ni static (in niti ne razred - Pregled), bi moral narediti:
Se opazi razliko med ustvaritvijo nove instance razreda in direktnega dostopanaj metode v static razredu?
//ti si sedaj tukaj (kar v even razredu): int value = 11; bool bChecking = Pregled.AliJeToStevilo(value); if(bChecking) MessageBox.Show(Vrednost he število."); else MessageBox.Show("Vrednost ni število."); //en drug razred za kontrolo: static class Preged { public static bool AliJeToStevilo(string value) { int stevilo = 0; if(int.TryParse(value, out stevilo)) return true; else return false; } }
To je en tak simple primer, zakaj je dobro uporablajti static razrede in metode.
V primeru da metoda "AliJeToStevilo" ni static (in niti ne razred - Pregled), bi moral narediti:
Pregled p = new Pregled(); bool bChecking = p.AliJeToStevilo(value);
Se opazi razliko med ustvaritvijo nove instance razreda in direktnega dostopanaj metode v static razredu?
Zgodovina sprememb…
- spremenil: Mitja Bonča ()
Ericssony ::
Using uporabi tudi za SqlCommand saj je le-ta tudi IDisposable.
using (SqlConnection sqlConnection = new SqlConnection(ConnectionString)) { using (SqlCommand sqlCommand = new SqlCommand()) { try { sqlCommand.CommandText = "SQL Query"; sqlCommand.CommandType = CommandType.Text; sqlCommand.Connection = sqlConnection; sqlConnection.Open(); sqlCommand.ExecuteNonQuery(); } catch { } finally { sqlConnection.Close(); } } }
Mitja Bonča ::
Yep. Prvilno. Drugače bo za GC (Garbage Collector) poskrbel za Dispose objekta. Ampak je vseeno bolje on 100% da to nareiš ti.
Se pravi z uporabo using besede, ali da da kliče instanco razreda sqlCommand:
Se pravi z uporabo using besede, ali da da kliče instanco razreda sqlCommand:
sqlCommand.Dispose();
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | SQL problemOddelek: Programiranje | 1702 (1320) | win64 |
» | C# INSERT statment ne vpise podatkovOddelek: Programiranje | 1212 (1086) | darkolord |
» | [Visual C#] TableAdapterOddelek: Programiranje | 1148 (1024) | detroit |
» | Statistika dijakov, pomocOddelek: Programiranje | 1794 (1278) | Mitja Bonča |
» | [C#] Query in codeOddelek: Programiranje | 1829 (1573) | iggy1 |