alexander2
Goto Top

VisualStudio C table.select Endlosschleife

Hallo zusammen,

habe ein kleines Problem den größten Wert in einer Tabelle zu finden.
VisualStudio 2019 C#

DataRow o = this.meinDataSet_bestellung.hbtab.Select("bnr = max(bnr)");

Diese select Anweisung läuft in eine Endlosschleife bei maximaler Prozessspeicherauslastung.
Starte ich select ohne Parameter, werden innerhalb von einer Sekunde alle 50.000 Datensätze angezeigt.

Was mach ich falsch ?

Danke.

Content-ID: 666678

Url: https://administrator.de/forum/visualstudio-c-table-select-endlosschleife-666678.html

Ausgedruckt am: 24.12.2024 um 04:12 Uhr

148121
148121 12.05.2021 aktualisiert um 16:44:59 Uhr
Goto Top
string strDBPath = @"D:\test.accdb";  
System.Data.OleDb.OleDbConnection conn = new OleDbConnection(string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source = {0}", strDBPath));  
conn.Open();
System.Data.OleDb.OleDbCommand cmd = new OleDbCommand("SELECT MAX(bnr) FROM Kundendaten", conn);  
OleDbDataReader reader = cmd.ExecuteReader();
reader.Read();
// wenn anderer Datentyp hier anpassen z.B. GetString(0)
int max = reader.GetInt32(0);
MessageBox.Show(max.ToString());
conn.Close();
https://docs.microsoft.com/de-de/dotnet/framework/data/adonet/ado-net-co ...

Oder auch mittels DataAdapter und DataTable
string strDBPath = @"D:\test.accdb";  
System.Data.OleDb.OleDbConnection conn = new OleDbConnection(string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source = {0}", strDBPath));  
conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT MAX(bnr) FROM Kundendaten", conn);  
DataTable dt = new DataTable();
adapter.Fill(dt);
MessageBox.Show(dt.Rows.ToString());
conn.Close();

Gruß w.
mbehrens
Lösung mbehrens 14.05.2021 um 00:07:57 Uhr
Goto Top
Zitat von @Alexander2:

habe ein kleines Problem den größten Wert in einer Tabelle zu finden.
VisualStudio 2019 C#

Ich würde so etwas machen:
const string strConn = @"Provider=Microsoft.ACE.OLEDB.16.0;Data Source=TestDatabase.accdb;Persist Security Info=False;";  
const string strSQL = @"SELECT MAX(Wert) FROM TestTable";  

using (OleDbConnection cn = new OleDbConnection(strConn))
{
    using (OleDbCommand cmd = new OleDbCommand(strSQL, cn))
    {
        object returnValue;

        cn.Open();

        returnValue = cmd.ExecuteScalar();

        if (returnValue != null && returnValue != DBNull.Value)
        {
        }
        else
        {
        }

        cn.Close();
    }
}
Alexander2
Alexander2 14.05.2021 um 08:50:55 Uhr
Goto Top
Danke ihr beiden,

also kann ich nicht das vorhandene Dadaset + Adapter verwenden.
Das ganze muss ich dann nur noch umschreiben auf einen SQL Server.

so klappt es bei mir (ist das ok so ? oder habe ich hier Kraut&Rüben programmiert ;) )

SqlConnection rs = new SqlConnection("Server=192.168.0.1;Database=mydv;User ID=dbuser;Password=1234");
string sSQL = "select max(bnr) as maxbnr from orders";
SqlCommand cmd = new SqlCommand(sSQL, rs);
SqlDataAdapter ma = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
ma.Fill(ds,"orders");

Console.WriteLine(ds.Tables["orders"].Rows["maxbnr"].ToString());
mbehrens
mbehrens 14.05.2021 um 10:57:26 Uhr
Goto Top
Zitat von @Alexander2:

also kann ich nicht das vorhandene Dadaset + Adapter verwenden.

Sicher kann man, aber warum sollte man hier ein Disconnected Dataset verwenden?

SqlConnection rs = new SqlConnection("Server=192.168.0.1;Database=mydv;User ID=dbuser;Password=1234");

Warum keine Trusted Connection?

string sSQL = "select max(bnr) as maxbnr from orders";
SqlCommand cmd = new SqlCommand(sSQL, rs);
SqlDataAdapter ma = new SqlDataAdapter(cmd);

Warum DataAdapter?

DataSet ds = new DataSet();
ma.Fill(ds,"orders");

Warum ein DataSet?

Console.WriteLine(ds.Tables["orders"].Rows["maxbnr"].ToString());
148121
Lösung 148121 14.05.2021 aktualisiert um 11:06:10 Uhr
Goto Top
oder habe ich hier Kraut&Rüben programmiert ;) )
Dafür das du nur einen einzigen Wert willst seeeehr viel Overhead für Kraut und Rüben 😁.
Das ganze muss ich dann nur noch umschreiben auf einen SQL Server.
Ich hatte das auf Access geschrieben weil deine letzte Frage auf ne Access DB abzielte, aber dank Connection String ist das ja beliebig umstellbar.
Alexander2
Alexander2 17.05.2021 um 08:51:23 Uhr
Goto Top
Guten Morgen,

"Warum" nicht ?

Ich habe das so im internet gefunden, auf der Suche nach meinem Problem, freue mich über jeden Hinweis über eine Vereinfachung oder einen link dorthin ;)
Alexander2
Alexander2 17.05.2021 um 08:51:49 Uhr
Goto Top
Guten Morgen, geht es denn einfacher ?
148121
148121 17.05.2021 aktualisiert um 09:09:27 Uhr
Goto Top
Zitat von @Alexander2:

Guten Morgen, geht es denn einfacher ?
Hat @mbehrens oben schon Code für gepostet.
Alexander2
Alexander2 17.05.2021 um 09:32:35 Uhr
Goto Top
sry,ich Penner, ist noch zu früh, Danke
Alexander2
Alexander2 17.05.2021 um 09:33:53 Uhr
Goto Top
Dankeschön. Sry, hab es zu spät gelesen.
mbehrens
mbehrens 17.05.2021 um 20:56:29 Uhr
Goto Top
Zitat von @Alexander2:

"Warum" nicht ?

Ich habe das so im internet gefunden, auf der Suche nach meinem Problem, freue mich über jeden Hinweis über eine Vereinfachung oder einen link dorthin ;)

Ah ja. Typisches Copy And Paste Programming.
Alexander2
Alexander2 18.05.2021 um 08:10:33 Uhr
Goto Top
fang ja gerade erst an face-sad
Wenn es gute Literatur zu empfehlen gibt, dann gerne ...