Permalänk

C# söka igenom databaser!

Hej!

Jag sitter och försöker programmera ihop en liten konsolapplikation i C#.
Hittills har jag åstadkommit följande:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlServerCe; using System.Data; namespace Module5 { class Program { static void Main(string[] args) { string connectionStr = @Data Source=C:\Users\Elvis\Desktop\C#\Projects\Module5\Module5\Shipping.sdf; SqlCeConnection connection = new SqlCeConnection(connectionStr); SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM ShippingTable", connection); SqlCeDataAdapter adapt = new SqlCeDataAdapter(cmd); DataSet ds = new DataSet(); adapt.Fill(ds, "ShippingTable"); foreach (DataTable dt in ds.Tables) { foreach (DataRow row in dt.Rows) { foreach (DataColumn column in dt.Columns) { Console.WriteLine(row[column]); } } } SqlCeConnection con1 = new SqlCeConnection(connectionStr); con1.Open(); SqlCeCommand cmd1 = new SqlCeCommand("SELECT * FROM ShippingTable", con1); SqlCeDataReader dr = cmd1.ExecuteReader(); Console.WriteLine("Please enter shipping data"); int input = Convert.ToInt32(Console.ReadLine()); while (dr.Read()) { int database = Convert.ToInt32(dr[1]); Console.WriteLine(dr[1]); if (input == database) { Console.WriteLine(""); } } } } }

Koden fungerar okej och kompilerar som den ska. Jag skall få den att:
Söka efter en kunds fraktdata med hjälp utav CustomerID (kolumn i min tabell) och visa datumet då varan skickades.
Jag försökte göra något liknande detta med hjälp utav följande kodstycke:

while (dr.Read()) { int database = Convert.ToInt32(dr[1]); Console.WriteLine(dr[1]); if (input == database) { Console.WriteLine("");

Detta verkar dock inte fungera. Applikationen låter mig inte söka, vad har jag gjort för fel?

La till code-taggar
Permalänk
Hedersmedlem

Jag la till code-taggar så att koden blir mer läsbar. Gör gärna det i framtiden också

Mvh
Moderator Shimonu

Permalänk
Medlem
Skrivet av Elvis_z89:

Hej!

Jag sitter och försöker programmera ihop en liten konsolapplikation i C#.
Hittills har jag åstadkommit följande:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlServerCe; using System.Data; namespace Module5 { class Program { static void Main(string[] args) { string connectionStr = @Data Source=C:\Users\Elvis\Desktop\C#\Projects\Module5\Module5\Shipping.sdf; SqlCeConnection connection = new SqlCeConnection(connectionStr); SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM ShippingTable", connection); SqlCeDataAdapter adapt = new SqlCeDataAdapter(cmd); DataSet ds = new DataSet(); adapt.Fill(ds, "ShippingTable"); foreach (DataTable dt in ds.Tables) { foreach (DataRow row in dt.Rows) { foreach (DataColumn column in dt.Columns) { Console.WriteLine(row[column]); } } } SqlCeConnection con1 = new SqlCeConnection(connectionStr); con1.Open(); SqlCeCommand cmd1 = new SqlCeCommand("SELECT * FROM ShippingTable", con1); SqlCeDataReader dr = cmd1.ExecuteReader(); Console.WriteLine("Please enter shipping data"); int input = Convert.ToInt32(Console.ReadLine()); while (dr.Read()) { int database = Convert.ToInt32(dr[1]); Console.WriteLine(dr[1]); if (input == database) { Console.WriteLine(""); } } } } }

Koden fungerar okej och kompilerar som den ska. Jag skall få den att:
Söka efter en kunds fraktdata med hjälp utav CustomerID (kolumn i min tabell) och visa datumet då varan skickades.
Jag försökte göra något liknande detta med hjälp utav följande kodstycke:

while (dr.Read()) { int database = Convert.ToInt32(dr[1]); Console.WriteLine(dr[1]); if (input == database) { Console.WriteLine("");

Detta verkar dock inte fungera. Applikationen låter mig inte söka, vad har jag gjort för fel?

Hur vet du att dr[1] är ett heltal? Eftersom du kör en select * så kommer den hämta ut informationen i ordningen som den är i databasen.
Tänk även på att det är zero-based index. Vilket betyder att den första kolumnen börjar på index 0.

Är det kanske meningen att du skulle skriva dr[0] istället?
Titta även vilka metoder som finns på DbDataReader (dr-objektet). GetString(), GetInt32() osv har du redan där för att labba med.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk

Hej Leedow!

Det vet jag inte, koden kan vara felskriven, det är just det sista kodstycket jag behöver hjälp med. Om jag ändrar till dr[0] (vilket det självklart skulle stått från början) och skriver 1 i min konsol får jag 1, 2 och 3 som printas ut (OrderID), den skriver inte ut något från de andra fälten.

Tanken är att jag ska skriva 1 i konsolen och då skall information om just den specifika leveransen komma fram. Informationen som skall renderas då är "ShippedDate" som är en annan kolumn i tabellen.

Mvh Elvis

Permalänk
Medlem
Skrivet av Elvis_z89:

Hej Leedow!

Det vet jag inte, koden kan vara felskriven, det är just det sista kodstycket jag behöver hjälp med. Om jag ändrar till dr[0] (vilket det självklart skulle stått från början) och skriver 1 i min konsol får jag 1, 2 och 3 som printas ut (OrderID), den skriver inte ut något från de andra fälten.

Tanken är att jag ska skriva 1 i konsolen och då skall information om just den specifika leveransen komma fram. Informationen som skall renderas då är "ShippedDate" som är en annan kolumn i tabellen.

Mvh Elvis

Jag förstår och det stämmer att inget annat skrivs ut. Du loopar och skriver endast ut position/kolumn 0 för varje rad i DataReadern.

Jag vet inte vilken position "ShippedDate" har i din tabell. Du kan tvinga en egen position, eller det absolut bästa sättet är att gå efter kolumnnamn i queryn istället.
Ex:

var query = "SELECT OrderID, ShippingDate FROM ShippingTable"; //... int orderID = dataReader.GetInt32(dataReader.GetOrdinal("OrderID")); //eller dataReader.GetInt32(0); DateTime shippedDate = dataReader.GetDateTime(dataReader.GetOrdinal("OrderID")); //eller dataReader.GetDateTime(1);

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Avstängd