Hej, Gissar att du skrivit fel och ska vara såhär? Ja, du antog rätt! Om du söker i numeriska fält är det bästa att kontrollera att sökvärdet verkligen är numeriskt. Sedan finns det andra anledning till att sökningen inte lyckades, t.ex. otillgänglig databas, det fångar du med en try. OK!! Tycker det ser bra ut. Jag skulle åtminstone gjort så själv :) Tack så hemskt mycket för "bollningen" av mina frågor!! :-DDatabaser igen...en enkel fråga:
Jag har en SQL sats och söker efter ett visst värde i databasen. Tex:
string SQL = "SELECT MyColumn FROM MyTable WHERE MyTable.MyColumn = '15' ";
System.Data.DataSet dbSet = db.ExecuteSelectSQL(SQL);
if (dbSet.Tables[0].Rows.Count > 0) //Table was found
{
if (dbSet.Tables[0].Rows.Count > 0) //A row was found
{
MyRow= dbSet.Tables[0].Rows[0].ItemArray[0].ToString();
}
}
else
{
}
Finns det inget annat sätt, tex .hasRow() (eller liknande som DataReader har)? Om jag söker efter en sträng i databasen istället kommer jag att få ett fel istället för att gå vidare till else-satsen.
Tidigare hade jag all kod innanför try-catch-finallly, men jag tycker inte att jag får till det så bra. Ska man endast ha db.connect i try och ännu en try-catch när man gör ExecuteSQL?
Thanks!Sv: Databaser igen...en enkel fråga:
if (dbSet.Tables.Count > 0) //Table was found
För att kontrollera om det finns några rader kan du göra såhär:
if (dbSet.Tables[0].Rows.Count > 0) //A row was found
Du behöver inte kontrollera Tables.Count, det är alltid 1 tabell även om det inte är några rows (om inte din ExecuteSelectSQL hittar på något annat då).
Det bästa är att validera söksträngen innan frågan körs.
Jag tycker du ska lägga själva databasfrågan i en try också, ifall något oförutsett inträffar (att databasen inte går att nå, är skadad eller liknande).
/JohanSv:Databaser igen...en enkel fråga:
Jag menade:
string SQL = "SELECT MyColumn FROM MyTable WHERE MyTable.MyColumn = '15' ";
System.Data.DataSet dbSet = db.ExecuteSelectSQL(SQL);
if (dbSet.Tables.Count > 0) //Table was found
{
if (dbSet.Tables[0].Rows.Count > 0) //A row was found
{
MyRow= dbSet.Tables[0].Rows[0].ItemArray[0].ToString();
}
}
else
{
}
Men om jag tex söker efter en sträng istället för 15 som ovan, så kommer man inte till else-satsen, utan programmet avslutas. (Det är ju meningen att jag ska ha en variabel där istället.) Man måste alltså kolla så att det man söker efter innehåller giltliga tecken innan man söker i databasen??Sv: Databaser igen...en enkel fråga:
/JohanSv:Databaser igen...en enkel fråga:
Då gör jag så här:
Database db=new Database();
try{
db.connect();
string SQL = "SELECT MyColumn FROM MyTable WHERE MyTable.MyColumn = '15' ";
System.Data.DataSet dbSet = db.ExecuteSelectSQL(SQL);
if (dbSet.Tables[0].Rows.Count > 0) //A row was found
{
MyRow= dbSet.Tables[0].Rows[0].ItemArray[0].ToString();
}
else
{
}
dbSet.Dispose();
}
catch(Exception e)
{
Console.WriteLine("Error " + e);
}
finally
{
db.Close();
}
Ser det ok ut?!
Fast jag får mycket tydligare felmeddelanden om jag skriver:
if (db.Exception != null)
{
Console.WriteLine("Error " + dbcountry.Exception.Message);
}
(Ger: "ogiltligt användarnamn eller lösenord, inloggning inte möjlig.")
Om jag testar:
catch
{
Console.WriteLine("Error " + dbcountry.Exception.Message);
}
får jag inte så snyggt meddelande heller: "Database is closed" istället för "ogiltligt användarnamn eller lösenord, inloggning inte möjlig."
Fast det är inte så viktigt...det löser sig nog.
Sv: Databaser igen...en enkel fråga:
/JohanSv:Databaser igen...en enkel fråga: