Laden...
T
tkrasinger myCSharp.de - Member
Softwareentwickler Enzesfeld (Niederösterreich) Dabei seit 26.03.2008 574 Beiträge
Benutzerbeschreibung

Forenbeiträge von tkrasinger Ingesamt 574 Beiträge

29.09.2008 - 15:33 Uhr

verwendetes Datenbanksystem: SQL Server 2005

Nachdem ich in meiner DB unzählige Procedures hab (über 500) verwende ich öfters die Filter die das Studio zur Verfügung stellt.

  1. Lassen sich die Filter irgendwie speichern? Jedesmal wenn ich das Studio neu öffne sind die weg.
  2. Kann ich irgendwie, so wie der "System Stored Procedures", eigene Ordner anlegen um meine Procedures zu strukturieren? Die Ordnung nur über Schema und Name bringt sich jetzt auch bald nichts mehr es sind einfach zu viele.
26.09.2008 - 10:41 Uhr

Du könntest auch eine Methode schreiben:

public bool HasStringLength(string x, params int[] arr)
{
 ....
}

und dann aufrufen:

if (HasStringLength(rowView.Row["familyname"].ToString(),8,12,20)
{
 ...
}
25.09.2008 - 15:37 Uhr

verwendetes Datenbanksystem: SQLServer 2005

Ich habe eine Menge an Prozeduren die mit einem SELECT * FROM ... enden, sodass ich diese Prozedur aufrufen kann und das Ergebnis als DataSet verarbeiten kann.

Jetzt hab ich aber auch Prozeduren, die solche Prozeduren verwenden z.B:

usp_Anlage
BEGIN
    ....
    DECLARE Cursor FOR Anzulegende Personen
    WHILE ...
       exec usp_KontoAnlage -- endet mit select * from Konto des erstellten satzes
       exec usp_BemeAnlage -- endet mit select * from Beme des erstellten satzes
    ...
    END
END

Wenn ich das im ManagemenStudio ausführe krieg ich Unmengen an Ausgaben die eigentlich keinen interessieren. Ich kann zwar mit NOCOUNT die Anzahl abstellen, aber die Ausgabe gibts halt immer noch, kann man die auch irgendwie abdrehen?

18.09.2008 - 11:25 Uhr

Als wenn ich jetzt mal z.b. ein Design hernehme, das sich prozentual auf die Seite verteilt, dann kann das Bild irgendwo sein. D.h. eigentlich musst du vorher gewährleisten, dass sich der Browser immer konstant öffnet und immer das gleiche AnzeigeFenster hat.
Aber sobald an der WebSeite irgendwas geändert wird ...

Ich weiß gar nicht, was das ganze überhaupt für einen Sinn haben sollte.

18.09.2008 - 08:13 Uhr


>

Aber ich glaub nicht, dass das das ist was du suchst. Aber ganz verstehen tu ich noch nicht was du willst ...

17.09.2008 - 12:18 Uhr

liegt wahrscheinlich daran, dass die Klasse TestClass nicht public ist sondern private.

15.09.2008 - 16:11 Uhr

Glaub nicht, dass man mit dem MS SQL solche Umwege gehen muss. Ehrlich nicht.

soweit ich weiß, sind diese Dinge wie DatabaseCompare (Struktur+Inhalt) erst in den Versionen der TeamSuite (VS für DataBase-Designers oder so) vorhanden. Nur mit SQL-Server und VS2005 geht da noch nix (soweit ich weiß).

15.09.2008 - 16:06 Uhr

probier einfach mal die DataSource vom Grid vorher auf NULL zu setzen.

15.09.2008 - 16:02 Uhr

Sind die Mail alle unterschiedliche? Oder kannst du auch eine Mail an 100 Empfänger schicken? Oder musst du tatsächlich 100 verschiedene Mails schicken?

Evtl. hat GMX auch was eingebaut um Spaming über die GMX-Postfächer in dieser Weise zu verhindern.

15.09.2008 - 15:59 Uhr

Andere Frage dazu:

Ich hab derzeit bei manchen Control das Attribut [Category("Darstellung")] drauf. Funktioniert auch, wie würd ich das aber in/für einem/ein englischen/s Visual Studio machen? Gibts den Namen "Darstellung" irgendwo als Meta-Namen hinterlegt?

15.09.2008 - 14:51 Uhr

verwendetes Datenbanksystem: SQL Server 2005

SELECT * 
FROM Konto k
WHERE EXISTS (
	SELECT * FROM Person p 
	WHERE UrsprungNr like '7030%' 
	AND k.UrsprungNr = p.UrsprungNr)

SELECT UrsprungNr 
FROM Konto k
WHERE EXISTS (
	SELECT 1 FROM Person p 
	WHERE UrsprungNr like '7030%' 
	AND k.UrsprungNr = p.UrsprungNr)

Unabhängig von der Sinnlosigkeit des Statements wollte ich wissen, ob es im SubSelect tatsächlich egal ist, wie groß/breit die Projektion ist.

Erstaunliche finde ich nämlich, dass der Exection Plan für beide Statements exakt das selbe anzeigt. Ist es also in solchen Fällen egal ob man SELECT * oder eben SELECT 1 schreibt?
Ich kann auch über den Profiler nicht wirklich relevante Unterschiede feststellen, da die Duration mal dies mal das anzeigt und rest ziemlich gleich oder nicht aussagekräftig genug ist.

12.09.2008 - 10:04 Uhr

Versteh ich das richtig, dass ihr das Datenmodell in den verschiedenen Layern in andere Objekte kapselt?
Wie läßt sich in dem Zusammenhang ein MVC oder MVP Pattern kapseln oder ist die Gesamtsicht schon eines dieses Patterns?

So in etwa. Mit den Pattern bin ich mir nicht ganz sicher, ob wir da so hinkommen. Wir haben uns da ein paar weitere Einschränkungen (keine Statement, alles über Stored Procedures, tw. CodeGeneration und andere Scherze) überlegt, und da das Projekt in der Form auch schon über 2 Jahre alt ist, gäbe es momentan sicherlich ein paar Technologien das anders zu gestalten (Linq, Entity-Framework).
Fakt ist, das wir, so wie es jetzt implementiert ist, damit sehr gut zurecht kommen, das System sehr flexibel ist, leicht wartbar und v.a. total leicht erweiterbar und schon eine neuere noch leichter wartbare Stufe geplant haben.

12.09.2008 - 08:27 Uhr

Also wir haben derzeit etwa das:

Server:
o) GDAL: Zugriff auf den SQL Server, komplett unabhängig von irgendwas anderen
o) DAL: Die DataAccessObjects aufgrund der vorhanden DB-Struktur
o) BL: Die BusinessLayer

o) Transport-Objects -> einfache Objekte zum Transportieren über das WebService. Die BL-Objekte werden in einfache TOs konvertiert, und beim upload natürlich wieder zurück

*** WebService

Client:

o) TOL: empfängt die TOs und hält diese als untere Schicht. Sozusagen BL und DAL in einem
o) PL: PresentationLayer: die tatsächlich dargestellten Objekte auf die in den Forms gebunden wird etc. Vorteil: man kann da viele - ich nenn sie "Blender" einbauen, die aus den TO-Eigenschaften irgendwelche anderen (evtl. kalkulierten) Eigenschaften hervorzaubern, die's es so halt eigentlich nicht gibt.

Es gibt dazu noch ein hübsches und buntes Diagramm, aber so tuts das auch.
Was hier für dich noch fehlen würde, ist eine Schicht, um die Sachen lokal zu schreiben, die würd ich ähnlich wie eine DAL am Server ansiedeln.

11.09.2008 - 16:22 Uhr

Am SQL-Server würd ich das etwa so machen:

SELECT * FROM Tabelle
WHERE (Thema = @Parameter_Thema OR @Parameter_Thema is null)
AND (Spalte2 = @Parameter_Spalte2 OR @Parameter_Spalte2 is null)
...

11.09.2008 - 12:46 Uhr

außerdem machen die aspx Seiten genau das ...

10.09.2008 - 13:39 Uhr

Ich hab zufällig eine neue Erkentnis gewonnen:

SELECT * 
FROM sysobjects
WHERE x IN (1,2,3)

ergibt:

Msg 207, Level 16, State 1, Line 5
Invalid column name 'x'.
Msg 207, Level 16, State 1, Line 5
Invalid column name 'x'.
Msg 207, Level 16, State 1, Line 5
Invalid column name 'x'.

Der Fehler kommt dabei genauso oft, wie Parameter im IN stehen. Vielleicht ist dieser Rückschluss falsch, aber mir kommt vor, dass das IN auf ein/mehrere OR umgemünzt wird, daher der Fehler so oft wie Parameter, weil aus dem einen IN 3 OR-Bedingungen werden.
Also nehm ich mal daraus an, dass es völlig unerheblich ist, ob man IN() oder OR schreibt, nur dass das IN() halt viel besser lesbar ist.

08.09.2008 - 11:01 Uhr

Ach wie schön wenn Träume wahr werden ...

07.09.2008 - 19:52 Uhr

Wenn es sich nur um eine Serverseitige Frage handelt, dann:

DECLARE @var int
SELECT @var = Column FROM TABLE WHERE ...

06.09.2008 - 08:44 Uhr

Da ich, wieviele andere, den OR-Mapper schon selbst geschrieben hab, stand ich auch mal vor dem Problem. Ich hab das ganze dann über das schon beschriebende "partial" gelöst.
Vorteil: Ich hab einen Ordner "CR Classes" in dem alle generierten Klassen drinnenliege, den ich immer wieder ohne Probleme überschreiben kann.
Nebenan hab ich einen Ordner "CR Extensions" wo ich einfach nach Bedarf Klassen erweitere.
Ich hab auch schon angedacht evtl. ein "CR Overrides" zu schreiben und hab in Vorraussicht praktisch alles an Methoden und Eigenschaften als "protected virtual" declariert, sodass eine überschreibende Klasse volle Kontrolle übernehmen kann. (auch Dinge, die ich mit Partial nicht schaffe).

Nachteil:
Während des Codens irrsinnig anstrengend, weil ich hin und wieder über die "gehe zu definition" in die generierte Klasse springe und dann ohne es zu merken evtl. dort was ändere, was bei der nächsten Generierung wieder weg ist. Da muss man höllisch aufpassen.

Restlichen Vor- Nachteile von partial könnt ihr eh selbst nachlesen.

05.09.2008 - 08:17 Uhr

und mal ganz ehrlich, wenn einer meiner Leute irgendwo "goto" schreibt, kriegt er eins über die Rübe. Das erste was man lernt ist beim Coden kein goto zu verwenden.

05.09.2008 - 08:15 Uhr

Hm, ich weiß nicht was ihr für Fehler bekommt, aber das ist bei mir aus lauffähigen und im Realeinsatz befindlichen Code:

case "Stat_Team_UserProjectsMonthly":
case "Stat_Team_UserProjects":
case "Stat_Team_Projects":
	DateFieldMode("month");
	break;

da gibts gar keine Problem, case ohne Code kann man übergehen, sobald code drinnen ist, gehts nicht mehr.

04.09.2008 - 16:56 Uhr

tja, die lustigen Sachen die in C/C++ gingen gibts jetzt nicht mehr ... 😉

04.09.2008 - 11:29 Uhr

habs jetzt nochmal angepasst:

/// <summary>
/// Converts a string into a decimal, if the string is null or empty 0 will be returned
/// </summary>
public static decimal Dec(string s)
{
    if (String.IsNullOrEmpty(s))
        return 0;
    decimal d = 4.25m;
    if (s.Contains(".") && s.Contains(","))
    {
        s = s.Replace(s.IndexOf(".") < s.IndexOf(",") ? "." : ",", String.Empty);
    }
    if (d.ToString().IndexOf(",") > -1)
    {
        return System.Convert.ToDecimal(s.Replace(".", ","));
    }
    else
    {
        return System.Convert.ToDecimal(s.Replace(",", "."));
    }
}

allerdings ist da eigentlich schon die Frage ob man eingaben wie "1,234,567.89" im deutsch wie im englischen tats. gleich behandeln sollte, oder nicht vielleicht doch einen Fehler schmeißen sollte. Aber das Funktioniert jetzt ebenso.

04.09.2008 - 11:05 Uhr

Hallo tkrasinger,

diese Lösung berücksichtigt nicht, dass Punkt und Komma wie in den Beispielen oben auch gleichzeitig in der Zahl vorkommen können.

herbivore

//// <summary>
/// Converts a string into a decimal, if the string is null or empty 0 will be returned
/// </summary>
public static decimal Dec(string s)
{
    if (String.IsNullOrEmpty(s))
        return 0;
    decimal d = 4.25m;
    if( s.Contains(".") && s.Contains(","))
        s = s.Replace(".",String.Empty);
    if (d.ToString().IndexOf(",") > -1)
        return System.Convert.ToDecimal(s.Replace(".", ","));
    else
        return System.Convert.ToDecimal(s.Replace(",", "."));
}

das funktioniert ziemlich kulturunabhängig, hier mein Unit Test dafür:

[TestMethod(true)]
public bool Decimaltest(TestContext testContext)
{
    System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("en-US");
    System.Threading.Thread.CurrentThread.CurrentUICulture = System.Threading.Thread.CurrentThread.CurrentCulture;
    
    Assert.AreEqual(1022.00m, Active.Utility.Dec("1022,00"));
    Assert.AreEqual(1022.58m, Active.Utility.Dec("1.022,58"));
    Assert.AreEqual(1022.58m, Active.Utility.Dec("1022.58"));
    Assert.AreEqual(1022.58m, Active.Utility.Dec("1022,58"));
    Assert.AreEqual(1234567.89m, Active.Utility.Dec("1.234.567,89"));

    System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("de-AT");
    System.Threading.Thread.CurrentThread.CurrentUICulture = System.Threading.Thread.CurrentThread.CurrentCulture;

    Assert.AreEqual(1022.00m, Active.Utility.Dec("1022,00"));
    Assert.AreEqual(1022.58m, Active.Utility.Dec("1.022,58"));
    Assert.AreEqual(1022.58m, Active.Utility.Dec("1022.58"));
    Assert.AreEqual(1022.58m, Active.Utility.Dec("1022,58"));
    Assert.AreEqual(1234567.89m, Active.Utility.Dec("1.234.567,89"));

    return true;
}
04.09.2008 - 08:16 Uhr

Also auch wenn die Lösung wahrscheinlich ziemlich doof ist, aber sie ist einfach, und funktioniert:


        /// <summary>
        /// Converts a string into a decimal, if the string is null or empty 0 will be returned
        /// </summary>
        public static decimal Dec(string s)
        {
            if (String.IsNullOrEmpty(s))
                return 0;
            decimal d = 4.25m;
            if (d.ToString().IndexOf(",") > -1)
                return System.Convert.ToDecimal(s.Replace(".", ","));
            else
                return System.Convert.ToDecimal(s.Replace(",", "."));
        }
03.09.2008 - 17:14 Uhr

cool, hab software-Ingenieur genommen. Da kam mein aktuelles Gehalt -25 Euro raus, aber halt Jahresgehalt um ein paar Tausender weniger, weil ichs ja 14 mal krieg in .at

01.09.2008 - 09:08 Uhr

Wir verwenden in unserem Projekt die Logging-Möglichkeiten aus der Microsoft-Enterprise-Library. Da die Unmengen Sachen kann was aber in Wirklichkeit kein Mensch braucht und auch nicht lesen kann, haben wir die Logs natürlich so angepasst, das man sie im Real-Betrieb verwenden kann.
Wir haben es jetzt so aufgebaut, dass es ein trace.log gibt, wo alle Datenbankzugriffe geloggt werden (über unseren eigenen DAL), ein error.log wo die Exceptions im Detail noch ausgeworfen werden und einen process.log wo man Meldungen vom Code einbauen kann um zu sehen welche Code-Teile irgendwo durchlaufen werden (wird selten bis gar nicht verwendet).

Das TraceFile sieht in etwa so aus:

/*29.08.2008 17:15:15.130*/ exec DAOGemeinde_get @GemNr=7010 /*(2ms)*/
/*29.08.2008 17:15:15.130*/ (T 62828970)Transaction opened
/*29.08.2008 17:15:15.240*/ (T 62828970) exec DAOPerson_update @UrsprungNr=7010017338,@Nachname='Ableitner-Unterschaumberg' /*(2ms)*/
/*29.08.2008 17:15:15.365*/ (T 62828970) exec DAOKonto_update @Person_UrsprungNr=7010017338,@Gemeinde_GemNr=7010 /*(107ms)*/
/*29.08.2008 17:15:15.412*/ (T 62828970)Transaction committed

Ich hab außerdem einen FileWatcher geschrieben, der diese Files überwacht und außerdem die verschiedenen Sachen auch farbig hervorheben kann, sodass es für den Entwickler sofort sichtbar ist, wenn irgendwo eine Fehlermeldung ist, Transaktionen werden farblich hervorgehoben etc.

01.09.2008 - 08:55 Uhr

Wenn du da was hast bitte unbedingt posten. Ich hab mich damit auch schon beschäftigt weil ich an Create ZEN Microphoto hab und da auch selbst was machen wollte und ebenfalls daran gescheitert bin, dass sich das Ding nicht normal ansprechen lässt - Glaub da muss ma einiges durchackern bis man da was hat.
(Ich habs dann aber aufgegeben weil meiner so kaputt ist, das ich mir wahrscheinlich an neuen Mp3-Player zulege)

29.08.2008 - 10:45 Uhr

Schon mal:

CASE WHEN [ApP] = 0 THEN 0 ELSE [A]/[ApP] END

probiert?

27.08.2008 - 09:44 Uhr

würd ich für das ganze eine StoredProcedure nehmen
Gibt nur leider keine SPs im Compact Server 😉

ups, sorry, hab ich nicht gesehen. Ist aber auch egal, einfach das Statement entsprechend umformen.

27.08.2008 - 08:19 Uhr

Also in .de ist das Lohnniveau doch deutlich höher. Ich kann dir sagen, dass du als Juniorentwickler bei uns in .at max. 35000€ im Jahr verdienen würdest. Da müsstest aber schon wirklich überzeugend sein und eine Firma finden die das zahlt. Bei uns würdest du im Schnitt etwa mit 30000€ aussteigen.

PS:
Der Mindestlohn für einen SWE ohne Erfahrung liegt bei uns etwa bei 27000€ im Jahr.

27.08.2008 - 08:13 Uhr
  1. würd ich für das ganze eine StoredProcedure nehmen

  2. müsstest du dann nur etwa sowas in der Richtung bauen:

C#
... Parameters.Add("@date",dt.GetDate());

SQL:
SELECT * FROM Test WHERE Datum BETWEEN @date AND DateAdd(day,1,@date)

26.08.2008 - 20:55 Uhr
<html>
<body style="background-color: #AABBAA;">
    <div style="background-color: #FF0000;">
        <div style="float:left; background-color: #FFFFFF; height:100px;">Left</div>
        <div style="background-color: #FFFFFF; height: 100px;">Content</div>
    </div>
</body>
</html>

Leider funktioniert das im IE nicht so ganz wie ich will, der macht nämlich, sobald ich bei den divs die heights angebe, diesen undefinierbaren abstand zwischen die 2 divs. Im Firefox ist das nicht so. Hat jemand eine Idee, wie ich das im IE wegbekomm?

Gelöst:
Mit einer DocType-Angabe verschwindet der Rahmen - klingt komisch, is aber so.

26.08.2008 - 13:47 Uhr

Ich frag die meisten, die sich als C#-Entwickler bewerben meistens, ob sie wissen was Reflection ist und warum/wofür man die verwendet. Ich sag euch, da kommen teilweise Antworten.

Ich für meinen Teil hasse es, wenn mir jemand gegenübersitzt, der mit Abkürzungen und Unmengen Anglizismen nur so um sich wirft. 1. gibts im Coding-Umfeld soviele Abkürzungen und leider auch sehr viele die unterschiedliche Bedeutungen haben, dass ich oft gar ned sagen kann, was derjenige jetzt meint. Und auch wenn im .NET-Bereich viel über English geht, sollten die meisten doch der deutschen Sprache mächtig sein und sich so ausdrücken, dass ein jeder es versteht - Im Consulting-Bereich vor allem wichtig, weil du so jemanden nicht zum Kunden schicken kanns, weil der Kunde kein Wort versteht.

Ich würde tats. auch differenzieren, was derjenige machen/können soll. Ich hatte mal ein Vorstellungsgespräch vor 2 Jahren für C#-Entwickler, bei dem ich gefragt wurde, was den alles bei einem Request vom Browser an den Server passiert. Und zwar bis auf ISO/OSI-Schichtenmodell Layer 1 hinunter. D.h. welche Netzwerkprotokolle verwendet werden, wie die Daten von Server zu Server zu Client kommen etc. Das fand ich etwas übertrieben. (Das Gespräch hat übrigens 3 Stunden gedauert)

Außerdem gibt es keine Standardfragen, man muss sich auf das Gegenüber einstellen. Ich kann keinen Schulabgänger von 20 Jahren das selbe fragen wie jemanden der 45 ist und 25 Berufserfahrung in 17 Technologien hat.
Daher immer zuerst die Grundfrage: Was will ich/Was brauch ich? Was kann ich vom Bewerber verlangen? Was sollte er aus seinem Alter/seiner Praxis können? Wenn ich das geklärt habe, kann ich tats. ins Detail gehen und ihn ein paar Detailfragen an den Kopf werfen.
Wobei da auch Lösungsvorgänge abzufragen sind und nicht nur, was ist der 2. Parameter von System.Reflection.MethodInfo.Invoke etc.

Außerdem (das bemängle ich leider noch immer bei uns in der Firma) sollten keine Leute aus dem Personal-Bereich, Entwickler einstellen, da sollte immer jemand dabei sein, der aktuell im Entwicklungsteam ist - Dafür gibts Teamleiter und Abteilungsleiter.

21.08.2008 - 11:16 Uhr

Danke @Xynratron.

Ich hab jetzt lt. Tuning Advisor den Index erstellen lassen, und dann die Statements nochmal probiert. Jetzt resultieren alle 3 in einen Index-Seek und die Verteilung ist schön auf 33% aufgeteilt. Heißt das nun, das alle 3 tats. gleich performant sind?

(BTW: hab den Index wieder rausgenommen, weil ich im Programm nie auf die Buchungssymbol so abfrage, der Index daher nicht sinnvoll ist)

21.08.2008 - 10:22 Uhr

Zu Parametern: Man kanns nicht oft genug betonen: Es gibt keinen Grund sie nicht zu verwenden. Egal welche Gründe alles dafür sprechen (Performance, Trennung von Code+Daten etc.)

Ist klar, nur das die Parameter automatisch vom SQL-Server eingesetzt wurden. Interessant wär vielleicht noch zu testen, wenn ich statt IN ('M1',..'M7') vielleicht IN (@M1,..@M7) schreibe, ob da die Parameter-Verwendung vielleicht was bringen würde.

21.08.2008 - 10:17 Uhr

PS: IndexScan ist im allgemeinen schlecht. Es sollte nach Möglichkeit immer ein SEEK sein.

und wie erreich ich das?

21.08.2008 - 09:14 Uhr

Hm, ich hab noch was gefunden:

SELECT top 100 * FROM Buchung WHERE BuchSymbol between 'M1' AND 'M7'

SELECT top 100 * FROM Buchung WHERE BuchSymbol IN ('M1','M2','M3','M4','M5','M6','M7')

SELECT top 100 * FROM Buchung WHERE 
BuchSymbol = 'M1' OR
BuchSymbol = 'M2' OR
BuchSymbol = 'M3' OR
BuchSymbol = 'M4' OR
BuchSymbol = 'M5' OR
BuchSymbol = 'M6' OR
BuchSymbol = 'M7'

Die Execution-Plan-Verteilung: 31%, 34%, 34% d.h. dass das between das schnellste ist, hab ich mir fast gedacht, als ichs ausprobiert habe. Zwichen den ORs und dem IN dürfte aber, so wie's aussieht, gar kein Unterschied sein.

Ich hab das ganze mal ohne Top 100 ausprobiert (die Tabelle ist leider etwas groß (ca. 3Mio Datensätze)) und da kam ich auf 30%, 35%, 35%.

Wobei das IN und OR statement jeweils nach dem ClusteredIndexScan (80%) ein Parallelsim ausgeführt haben (20%), das between jedoch zu 100% in den CIS benutzt hat.

Interessant war für mich auch, dass der Executionplan für das between angezeigt hat: SELECT * FROM [Buchung] WHERE [BuchSymbol]≥@1 AND [BuchSymbol]≤@2

D.h. das ganze Statement wurde um Parameter erweitert/verändert. Liegt darin vielleicht die erzielte Beschleunigung?

19.08.2008 - 09:27 Uhr

verwendetes Datenbanksystem: SQL Server 2005

In den meisten Performance-Tipps für den SQL Server wird empfohlen, IN nicht zu benutzen. Es steht aber nicht ab wann das gilt. Ich hab folgende Statements ausgeführt und der SQL-Server sagt mir bei den Executions Plans für beide Statements 50%.
Ab wann wird das IN nun tatsächlich langsamer/schlechter? Ist das von der Menge der Elemente abhängig, vielleicht von der Größe der Spalte? Ich würde sonst nämlich immer IN verwenden, weils einfach besser zu lesen ist.
Hat jemand von euch da fundierte Erkentnisse evtl. sogar nachvollziehbare Beispiele?

SELECT * FROM Balance WHERE BalanceRowType = 'O' OR BalanceRowType = 'A'

vs.

SELECT * FROM Balance WHERE BalanceRowType IN ('O','A')

PS:
Sorry, falls es einen solchen Thread schon gibt, aber ich konnte keine Suche formen, die sinnvolle Ergebnisse geliefert hat.

08.08.2008 - 15:33 Uhr

probiert die zwischenablage in den "calc" reinzukopieren, teilweise kommt da was 😉

08.08.2008 - 14:48 Uhr

ts, schon wieder den Thread missbrauchen, der ist doch nur sinnvoll, wenn man in der Früh reinschaut und dann das Clipboard von gestern reinkopiert. Dann ist das sinnvoll, dumm irgendwelche Links und zeilenweise Code posten glaubt einem doch kein Mensch ...

07.08.2008 - 14:58 Uhr

im Access auf Register-control?

Hab das grad mal schnell probiert mit

RegisterControl.Pages.Add

leider kommt da "Damit Sie Steuerelemente erstellen oder löschen können, müssen Sie sich in der Entwurfsansicht befinden" ...

07.08.2008 - 14:51 Uhr

rofl, ist das dein kopf herbivore?

Als ich den titel des threads gelesen hab' musste ich schon schmunzeln ... 😉

07.08.2008 - 09:57 Uhr

Interessant, kennt jemand solche Statistiken auch für Österreich?

05.08.2008 - 13:03 Uhr

Also ich hab keine Ahnung wieviele .NET Klassen ich im Kopf hab, genug, dass ich nicht oft was nachschlagen muss. Und da ich C#/.NET jeden Tag verwende, brauch ich auch keine Scripts oder sonst irgendwas.
Die Zauberwörter heißen: Google, MSDN, myCSharp.de ... der Rest ist Routine.

30.07.2008 - 15:11 Uhr

Für Visual Studio selbst als Plugin wirst du wohl wenig finden. Aber was du suchst nennt sich Profiler, einer der guten wäre zum Beispiel der
>
.

rofl vor ca. 2 sec entdeckt: http://www.red-gate.com/products/ants_profiler/index.htm

allerdings kost des teil was, aber von den screenshots her, wärs genau das, kennt da wer was "freies"?

EDIT: Denke mit dem Schlagwort Profiler wird sich was finden lassen.

EDIT: Hat wer eine Idee wie diese Dinge funktionieren bzw. in was sie geschrieben sind etc.?

EDIT: Ich bezweifle etwas die Messmethoden vom oben erwähnten ANTS:

30.07.2008 - 14:46 Uhr

Leider gibts zu "Test" etc. viel zu viele Threads um alles zu lesen, installieren und auszuprobieren.

Ich kenn aus dem TFS die Performance-Analyse. Da startet man einfach die Solution und das Tool zeichnet auf, welcher Methodenaufruf wie lange gebraucht hat, wie lange eine Methode gebraucht hat, welche Methode von welcher aufgerufen wurde und wieoft etc.

Ich brauch kein Unit-Testing oder sowas ich würd nur gern relativ rasch langsame Methoden finden, gibts da was einfaches und schlankes für VS2005/C#/2.0?

30.07.2008 - 10:09 Uhr

Da musst du wohl manuell angeben welche Spalte du zeigen willst (also im DataGrid manuelle die gewünschte Spalte hinzufügen und richtig binden) und dann die Eigenschaft "AutoGenerateColumns" vom Grid auf false setzen. (Gibts nicht übern Designer)

29.07.2008 - 08:53 Uhr

usp_ServiceManager_GetAutoEntryUsers

hm, interessant, das is sicher schon 20 min her 😉