Hantera SQL-strängar i program

Permalänk
Medlem

Hantera SQL-strängar i program

Hej!

Har lite funderingar angående hur man vanligtvis hanterar SQL-förfrågningar i till exempel C# .NET. Jag har skrivit ett antal program som använder SQLite på senare tid, riktigt fint för mindre program för övrigt. Det jag kommit fram till är att det är inte speciellt snyggt att blanda SQL frågor med vanlig kod. Typ,

string sqlStatement = "SELECT age FROM people WHERE age > ?"; database.Query(sqlStatement);

Det blir rörigt att "blanda språk", mycket strängar som är snarlika överallt.

En annan lösning jag har sett är en QueryBuilder i någon form. Något sådant känns väl som ett alternativ. Man skulle kunna tänka sig något man kan använda så här,

string sqlStatement = queryBuilder.SelectColumns("age").FromTable("people").Where("age", Comparison.GreaterThan, "?").GetQuery();

Men jag vet inte om det tar bort problemet egentligen och det lägger till massa extra logik som måste köras när man ska bygga en sql-fråga, och dessutom mer kod. Det positiva är väl att det är relativt lätt att anpassa till olika databassystem.

Det jag använder mig av just nu är bara strängar i projektets resurser som man kommer åt med Resources.SqlString. Jag vet inte riktigt vad jag är ute efter med frågan, jag är nog mest nyfiken på hur ni andra gör. Är undansparade strängar ändå ofta det bästa sättet?

Permalänk
Medlem

Har du tittat på LINQ? Det är fortfarande (eller iaf åtminstone nästan) ett extra "språk" men integrationen med din övriga kod blir bättre.

Just nu använder jag Entity Framework och låter det helt hantera min datalagring. Det går troligen saktare än direkta SQL-frågor men jag behöver inte ha den snabbheten i det jag skriver för tillfället.

Permalänk
Medlem

ADO.NET / Entity Framework / LINQ to SQL låter som något du bör titta på Att hårdkoda sql frågor känns ganska förlegat i dagens .NET utveckling

Permalänk
Medlem

LINQ to SQL funkar i många sammanhang, så det bör du titta på. Det finns dock situationer när det inte är lämpligt, och då brukar jag använda en klass som enbart hanterar SQL. Men med tanke på ditt exempel är det nog inget problem för dig.

Visa signatur

Bra, snabbt, billigt; välj två.

Ljud
PC → ODAC/O2 → Sennheiser HD650/Ultrasone PRO 900/...
PC → S.M.S.L SA300 → Bowers & Wilkins 607

Permalänk
Medlem

Tack! Uppskattar alla förslag. LINQ to SQL verkar ju underbart. Jag har sett att det dessutom verkar ganska enkelt att använda tillsammans med SQL Server Compact Edition så det kanske inte vore fel att gå över till det istället för SQLite? I så fall till mitt nästa problem, hur konverterar jag från antingen SQLite eller MS SQL till Compact edition? Det är ju en djungel av olika program och det verkar svårt att hitta något som gör precis det man vill, speciellt om det helst ska vara gratis. Kanske borde satsa på att skriva ett program som konverterar databaser istället för mitt nuvarande projekt!

Permalänk
Medlem
Skrivet av Goose7:

Hej!

Har lite funderingar angående hur man vanligtvis hanterar SQL-förfrågningar i till exempel C# .NET. Jag har skrivit ett antal program som använder SQLite på senare tid, riktigt fint för mindre program för övrigt. Det jag kommit fram till är att det är inte speciellt snyggt att blanda SQL frågor med vanlig kod. Typ,

string sqlStatement = "SELECT age FROM people WHERE age > ?"; database.Query(sqlStatement);

Det blir rörigt att "blanda språk", mycket strängar som är snarlika överallt.

En annan lösning jag har sett är en QueryBuilder i någon form. Något sådant känns väl som ett alternativ. Man skulle kunna tänka sig något man kan använda så här,

string sqlStatement = queryBuilder.SelectColumns("age").FromTable("people").Where("age", Comparison.GreaterThan, "?").GetQuery();

Men jag vet inte om det tar bort problemet egentligen och det lägger till massa extra logik som måste köras när man ska bygga en sql-fråga, och dessutom mer kod. Det positiva är väl att det är relativt lätt att anpassa till olika databassystem.

Det jag använder mig av just nu är bara strängar i projektets resurser som man kommer åt med Resources.SqlString. Jag vet inte riktigt vad jag är ute efter med frågan, jag är nog mest nyfiken på hur ni andra gör. Är undansparade strängar ändå ofta det bästa sättet?

Hur vore det att använda exempelvis PostGreSQL för att bygga querien med Parametrar istället?
Jag föredrar själv att bygga hela syntaxen själv utan att använda en querybuilder, men det är ett tips.

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40