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-Key: 666678

Url: https://administrator.de/contentid/666678

Printed on: April 25, 2024 at 06:04 o'clock

Mitglied: 148121
148121 May 12, 2021 updated at 14:44:59 (UTC)
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.
Member: mbehrens
Solution mbehrens May 13, 2021 at 22:07:57 (UTC)
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();
    }
}
Member: Alexander2
Alexander2 May 14, 2021 at 06:50:55 (UTC)
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());
Member: mbehrens
mbehrens May 14, 2021 at 08:57:26 (UTC)
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());
Mitglied: 148121
Solution 148121 May 14, 2021 updated at 09:06:10 (UTC)
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.
Member: Alexander2
Alexander2 May 17, 2021 at 06:51:23 (UTC)
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 ;)
Member: Alexander2
Alexander2 May 17, 2021 at 06:51:49 (UTC)
Goto Top
Guten Morgen, geht es denn einfacher ?
Mitglied: 148121
148121 May 17, 2021 updated at 07:09:27 (UTC)
Goto Top
Zitat von @Alexander2:

Guten Morgen, geht es denn einfacher ?
Hat @mbehrens oben schon Code für gepostet.
Member: Alexander2
Alexander2 May 17, 2021 at 07:32:35 (UTC)
Goto Top
sry,ich Penner, ist noch zu früh, Danke
Member: Alexander2
Alexander2 May 17, 2021 at 07:33:53 (UTC)
Goto Top
Dankeschön. Sry, hab es zu spät gelesen.
Member: mbehrens
mbehrens May 17, 2021 at 18:56:29 (UTC)
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.
Member: Alexander2
Alexander2 May 18, 2021 at 06:10:33 (UTC)
Goto Top
fang ja gerade erst an face-sad
Wenn es gute Literatur zu empfehlen gibt, dann gerne ...