Laden...

Forenbeiträge von Noodles Ingesamt 4.644 Beiträge

15.11.2007 - 17:09 Uhr

Reicht Dir evtl. schon ShowUpDown = true?

10.11.2007 - 12:48 Uhr
public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();

        IntPtr lhWnd = FindWindowEx(myComboBox.Handle, IntPtr.Zero, "EDIT", null);
        DisallowPaste p = new DisallowPaste();
        p.AssignHandle(lhWnd);

    }
    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
}

public class DisallowPaste : NativeWindow
{
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == 0x0302)
            return;

        base.WndProc(ref m);
    }
}
09.11.2007 - 11:27 Uhr
sp_pkeys 'TableName'
08.11.2007 - 21:09 Uhr

Hi,

ja klar, es fallen dll Dateien raus. Aber MSBuild muss auch mit den Projektmappen klarkommen und das scheint wohl momentan nicht der Fall zu sein. Out of the Box funktioniert es auf jeden Fall nicht. Das ist sicher. 😉

08.11.2007 - 19:53 Uhr

Hi,

hast Du das schon mal gemacht? MSBuild kann von Haus aus nicht mit BizTalk Projekten, soweit ich das gesehen habe.
Bin dabei es über einen eigenen Task uzu versuchen.

08.11.2007 - 19:17 Uhr

LINQ to SQL

Voraussetzung: Spracherweiterungen in C# 3.0

Dies wird ein kleiner Überblick zu LINQ to SQL. Eins vorweg LINQ hat nicht zwingend etwas mit Datenbanken zu tun, LINQ to SQL schon.
LINQ to SQL ist ein O/R Mapper, welcher mit dem .NET Framework 3.5 mitkommt. Dieser erlaubt es, relationale Daten als .NET Klassen zu modellieren. Die Daten können sowohl gelesen, als auch manipuliert werden. LINQ to SQL unterstützt Transaktionen, Views, Gespeicherte Prozeduren und benutzerdefinierte Funktionen.

Visual Studio 2008 enthält einen Designer, der beim Modellieren der Klassen hilft. Man kann dies auch manuell tun, entweder durch Attribute oder eine XML-Datei, welche mit dem SDK Tool SqlMetal.exe generiert werden können. Der Designer erstellt standardmäßig die Klassen mit Attributen. Ich werde es hier beim automatischen Erstellen durch den Designer belassen.

Um den Designer verwenden zu können, fügt man dem Projekt ein neues Item ( „LINQ to SQL Classes“ ) hinzu. Anschließend kann man aus dem ServerExplorer per Drag & Drop die gewünschten Tabellen oder Views hinzufügen. Desweiteren gibt es einen Bereich für Methoden, auf den Gespeicherte Prozeduren oder Funktionen hinzugefügt werden können. Der Designer erkennt die Relationen und fügt dafür die benötigten Eigenschaften in die Klassen ein. Außerdem erkennt er bei Tabellennamen die Mehrzahl und macht beim Generieren der Klasse daraus eine Einzahl. Aus Customers wird die Klasse Customer. Dies funktioniert nur mit englischen Bezeichnern.

Im Designer kann pro Eigenschaft per „Delay Loaded“ eingestellt werden, dass diese erst bei Zugriff aus der Datenbank geladen werden soll.
Die wichtigste Klasse ist die DataContext Klasse, über diese werden die Objekte geladen und gespeichert. Der DataContext übersetzt die Anfragen der der Objekte in SQL Queries und das Ergebnis der Queries zurück in Objekte. Über die Log Eigenschaft des DataContext kann man genau sehen, wann welche Query abgesetzt wird.

Eine Lambda Expression wird entweder als Delegate oder als ExpressionTree übergeben. Der Compiler entscheidet dies anhand der Interfaces IEnumerable und IQueryable. Bei LINQ to SQL ist der Typ IQueryable, daraufhin wird die Lambda Expression als ExpressionTree übergeben. Diese kann der Provider dann auswerten und die entsprechende SQL Query daraus generieren.

Beispiel für eine Abfrage aller Kunden aus London:

NorthwindDataContext ctx = new NorthwindDataContext();
ctx.Log = Console.Out;
var customers = from c in ctx.Customers 
                where c.City == "London"
                select c;

foreach( var customer in customers )
    Console.WriteLine( customer.ContactName );

Alle Kunden aus London mit den zugehörigen Bestellungen:

NorthwindDataContext ctx = new NorthwindDataContext();
ctx.Log = Console.Out;
                
var customers = from c in ctx.Customers 
                where c.City == "London"
                select c;

foreach ( var customer in customers )
{
    Console.WriteLine( customer.ContactName );
    foreach( var order in customer.Orders )
        Console.WriteLine("  {0}", order.OrderID);
 }

Hier fällt auf, dass bei jedem Zugriff auf Orders eine Query abgesetzt wird, um diese aus der Datenbank zu laden. Dieses Verhalten kann geändert werden. Zum einen kann man einstellen, dass gar keine Relationen mit geladen werden. Dazu setzt man die Eigenschaft DeferredLoadingEnabled des DataContext auf false. Zum anderen kann eingestellt werden, dass die Relationen gleich mit geladen werden, so dass nur eine Query zur Datenbank abgesetzt werden muss.

NorthwindDataContext ctx = new NorthwindDataContext();
ctx.Log = Console.Out;

DataLoadOptions options = new DataLoadOptions();
options.LoadWith<Customer>( c => c.Orders );
ctx.LoadOptions = options;
            
var customers = from c in ctx.Customers 
                where c.City == "London"
                select c;

foreach ( var customer in customers )
{
    Console.WriteLine( customer.ContactName );
    foreach ( var order in customer.Orders )
        Console.WriteLine( "  {0}", order.OrderID );
}

Wenn man nun versucht auf diese Weise auch noch die OrderDetails zu laden, wird man merken, dass dabei wieder eine Query abgesetzt wird. Das liegt daran, dass LINQ to SQL die LoadOption nur für zwei Ebenen zulässt. Um die Komplexität der Ergebnisse zu minimieren.

Desweiteren kann man die LoadOptions Klasse nutzen um die Bestellungen bereits beim Laden zu filtern.

NorthwindDataContext ctx = new NorthwindDataContext();
ctx.Log = Console.Out;

DataLoadOptions options = new DataLoadOptions();
options.AssociateWith<Customer>( c => c.Orders.Where( o => o.OrderDate > new DateTime( 1998, 1, 1 ) ) );
            
ctx.LoadOptions = options;
            
var customers = from c in ctx.Customers 
                where c.City == "London"
                select c;

foreach ( var customer in customers )
{
       Console.WriteLine( customer.ContactName );
       foreach ( var order in customer.Orders )
           Console.WriteLine( "  {0} {1}", order.OrderID, order.OrderDate );
} 

Beispiel für das Aufrufen einer gespeicherten Prozedur:

NorthwindDataContext ctx = new NorthwindDataContext();
ctx.Log = Console.Out;
var result = ctx.Ten_Most_Expensive_Products();
foreach ( var item in result )
    Console.WriteLine( "{0} {1}", item.TenMostExpensiveProducts, item.UnitPrice );

Beispiel für das Anlegen eines neuen Kunden:

NorthwindDataContext ctx = new NorthwindDataContext();
ctx.Log = Console.Out;

Customer customer = new Customer 
{
    CustomerID = "SHARP",
    ContactName = "MyCSharp User",
    CompanyName = "MyCSharp GmbH",
    Country = "Deutschland",
    City = "Berlin"
};
ctx.Customers.Add( customer );
ctx.SubmitChanges();

Löschen eines Kunden:

NorthwindDataContext ctx = new NorthwindDataContext();
ctx.Log = Console.Out;

Customer customer = ctx.Customers.Single( c => c.CustomerID == "SHARP" );
ctx.Customers.Remove( customer );
ctx.SubmitChanges();

Paging von Kunden:

NorthwindDataContext ctx = new NorthwindDataContext();
ctx.Log = Console.Out;

var customers = (from c in ctx.Customers
                 select c).Skip( 10 ).Take( 11 );

foreach (var customer in customers)
    Console.WriteLine(customer.ContactName);

Kunden nach Ort gruppieren und nach Anzahl sortieren:

NorthwindDataContext ctx = new NorthwindDataContext();
ctx.Log = Console.Out;

var customers = from c in ctx.Customers
                group c by c.City into g
                orderby g.Count() descending
                select new
                {
                    City = g.Key,
                    Count = g.Count()
                };

foreach ( var item in customers )
    Console.WriteLine( "{0} {1}", item.City, item.Count );

Alle Lieferanten mit die Kunden, die im gleichen Ort wohnen:

NorthwindDataContext ctx = new NorthwindDataContext();
ctx.Log = Console.Out;

var suppliers = from s in ctx.Suppliers
                join c in ctx.Customers on s.City equals c.City into Customers
                select new
                {
                    Supplier = s.ContactName,
                    Customers,
                    City = s.City
                };

foreach (var item in suppliers)
{
    Console.WriteLine("{0} {1}", item.Supplier, item.City);
    foreach (var customer in item.Customers)
        Console.WriteLine("\t{0}", customer.ContactName );
}

Mit LINQ to XML kommt auch ein performanteres und einfachereres XML API mit. Hier ein Beispiel wie die Kunden aus London in XML geschrieben werden.

NorthwindDataContext ctx = new NorthwindDataContext();
var customers = from c in ctx.Customers
                where c.City == "London"
                select c;

XDocument doc = new XDocument(
        new XElement( "Customers",
             from c in ctx.Customers
             where c.City == "London"
             select new XElement( "Customer",
                    new XAttribute( "id", c.CustomerID ),
                    new XElement( "ContactName", c.ContactName ),
                    new XElement( "Company", c.CompanyName ),
                    new XElement( "City", c.City ) ) ) );
doc.Save( Console.Out );

In Aktionen der generierten Klassen kann man durch partielle Methoden eingreifen. Partielle Methoden sind private Methoden in partiellen Klassen.
Partial Methods

partial class Foo
{
    partial void Bar();
      
    public void Save()
    {
        Bar();
    }
}

Ist eine partielle Methode nur definiert, wird diese nicht vom Compiler berücksichtigt. Es werden also keine Metadaten generiert. Somit wird diese Methode nicht aufgerufen. Dadurch spart man sich den Overhead bei Events, in dem man immer prüfen muss, ob jemand das Event aboniert hat. Wenn man die Klasse Foo kompiliert und anschließend im Reflector betrachtet, findet man die Methode Bar nicht mehr. Erstellt man eine weitere partielle Klasse Foo und implementiert die Methode Bar, wird diese kompiliert und man sieht sie im Reflector. Nun hat man in den generierten Klassen einige partielle Methoden mit denen man in das Verhalten eingreifen kann.

partial class Customer
{
    partial void OnContactNameChanging( string value )
    {
        if (string.IsNullOrEmpty( value ))
        {
            // ...
        }
    }
}
07.11.2007 - 21:55 Uhr

Hi,

weiß jemand wie man in einem TeamBuild BizTalk Projekte builden kann. Alles was ich versucht habe ( einiges bei google gefunden ) funktionierte nicht.
Der TeamBuild besteht aus C# und BizTalk Projekten.

Gruß
Noodles

07.11.2007 - 09:23 Uhr

Original von winx
P.S: hab die Frage auch nochmal im RemotingHelperThread gestellt...

Ich hab ihn da wieder gelöscht!
Bitte in [Hinweis] Wie poste ich richtig? Punkt 2 beachten.

07.11.2007 - 09:15 Uhr

Damit ist gemeint, dass Du auf Row-Ebene nicht mehr über stringbasierte Indexer zugreifen musst. Denn da hast Du die typisierten Eigenschaften.

06.11.2007 - 16:25 Uhr

Was genau ist denn jetzt das Problem?

DataSet/-Table Instanz erstellen und in Deiner Schleife pro Durchlauf eine neue Row in die Table einfügen.

05.11.2007 - 11:29 Uhr

Hi,

wie bekomme ich in den Reporting Services die Zeilenanzahl einer Tabelle heraus? CountRows liefert mit immer die Anzahl der Zeilen aus dem DataSet. Bei einem Filter auf der Tabelle ist das dann natürlich falsch.

Gruß
Noodles

04.11.2007 - 13:01 Uhr

Die Meldung sagt doch eigentlich alles.

Die MSDN meint folgendes:

Anstelle der direkten Verwendung eines Konstruktors müssen Sie zum Erstellen eines SqlDataReader die ExecuteReader-Methode des SqlCommand-Objekts aufrufen.

SqlDataReader

Die Sql... Klassen sind für den MS SQL Server.

03.11.2007 - 13:40 Uhr

[Zu Besuch]

29.10.2007 - 17:11 Uhr

Am einfachsten mit LINQ, falls Du das verwenden kannst.
Ansonsten selber machen:
http://support.microsoft.com/kb/325685/en-us

29.10.2007 - 07:12 Uhr

In der MSDN findet man unter DataGridView.VirtualMode ein komplettes Beispiel.

28.10.2007 - 22:11 Uhr

Original von landau66
Wie kann ich feststellen, was für eine Art von INstanz von SQL Server 2005 (Developer Edition)ich auf meinem Computer habe?

Registry.

Original von landau66
Wie kann ich eine Excelliste in Sql Server 2005 importieren? Gibt es da eine Funktion ähnlich wie in Access - "externe Daten"??

http://davidhayden.com/blog/dave/archive/2006/05/31/2976.aspx

Original von landau66
Letzte Frage: Wie kann ich im Visual Studio eine Verbindung hinzufügen? Das Kontextfenster "Verbindung hinzufügen" finde ich, aber was ist dort einzutragen?

Was fehlt Dir? Der ConnectionString?
www.connectionstrings.com

26.10.2007 - 15:27 Uhr

@winSharp93

Bezieht sich das nur auf WPF? Denn ich kann keinen Deiner genannten Punkte nachvollziehen, ich habe aber auch noch kein WPF Projekt erstellt. Ich arbeite täglich mit WF und LINQ, da gibt es keinerlei Probleme.

26.10.2007 - 12:00 Uhr

Arbeite seit dem Erscheinen der Beta 2 täglich damit ( LINQ und WF ).
Habe es auf einem Win 2k3 Server installiert. Installation verlief ohne Probleme. Es ist deutlich schneller als VS 2005 und sehr stabil. Ich hatte noch keinen Absturz oder Sonstiges.

24.10.2007 - 17:21 Uhr

Hast Du die Fehlermeldung mal bei google eingegeben? Jede Menge Treffer!
http://www.tjitjing.com/blog/2007/04/unable-to-convert-mysql-datetime-value.html

24.10.2007 - 15:14 Uhr

Wenn man ein DataGridView mit den Defaulteinstellungen verwendet und nur den SelectionMode auf CellSelect einstellt, dann wird bei Enter doch die nächste Zelle der gleichen Spalte markiert.

Für den Tab kannst Du es so machen:

private void dataGridViewOnKeyDown( object sender, KeyEventArgs e )
{
    if( e.KeyCode == Keys.Tab )
    {
        int col = dataGridView.CurrentCell.ColumnIndex;
        int row = dataGridView.CurrentCell.RowIndex;
                
        dataGridView.CurrentCell = dataGridView[col, row + 1];

        e.Handled = true;
    }
}
23.10.2007 - 07:10 Uhr

Um zwischen Workflow und Host zu kommunizieren musst Du ein External Data Exchange Service nutzen.

17.10.2007 - 21:33 Uhr

Original von v.wochnik
Sollte auch nur als Beispiel dienen, dass noch sehr sehr alte APIs gute Dienste leisten.

Das werden sie auch sicherlich noch lange. Echtzeit. Aber die Richtung von MS finde ich ganz gut, dass sie konsolidieren und vereinfachen. Nimmt man mal WCF und LINQ, sieht man sehr gut in welche Richtung MS (momentan) geht.

17.10.2007 - 13:37 Uhr

Hi,

ich habe eine ParallelActivity mit 2 Sequenzen. Für jede Sequenz habe ich ein eigenes CorrelationToken, welches die Activities in den jeweiligen Sequenzen zugewiesen bekommen.
Nun bekomme ich zur Laufzeit folgenden Fehler:

Correlation value specified does not match the already initialized correlation value on declaration <myToken> for activity <myActivity>.

Hat jemmand eine Idee, an was das liegt bzw. wie ich den Fehler behebe?

Gruß
Noodles

15.10.2007 - 13:30 Uhr

Original von v.wochnik
Allein schon die Tatsache, dass viele UserControls für WinForms existieren, lässt WPF schlecht aussehen.

Genau, weil beide Technologien ja gleich lang auf dem Markt sind.

15.10.2007 - 13:04 Uhr

Original von Briefkasten
Das Event soll nur aufgerufen werden, wenn man in eine Zelle Clickt und nicht wenn man sonst wo im datagrid klickt.

Na dann ist es doch das richtige.

Original von Briefkasten
Aber in diesem Ereignis gibt es auch keine Mausinformationen.

Doch, gibt es.

15.10.2007 - 09:11 Uhr

Warum verwendest Du nicht DataGridView.CellMouseClick?

10.10.2007 - 11:55 Uhr

Hi,

ich habe folgendes Problem. Ich schicke etwas an den BizTalk, dieser versucht die Nachricht an einen WebService ( SOAP Adapter ) zuzustellen. Das funktioniert auch bestens. Ist allerdings der WebService nicht erreichbar ( AppPool angehalten ), erscheint die Nachricht im BizTalk unter „Suspended service instances ( resumable )“. Soweit ist das auch noch ok. Nun starte ich den AppPool wieder und resume die Nachricht, dadurch wird diese ausgeliefert.
Nun habe ich aber 2 Einträge unter „Suspended service instances“ einmal „resumable“, was die ursprüngliche Nachricht ist und einmal „unresumable“ , was ein Routing Failure Report ist.
Wie kann ich das verhindern oder durch was wird meine Nachricht, die ja nun korrekt ausgeliefert ist, wieder als resumable im BTS abgelegt? Durch könnte ein Benutzer denken, die Nachricht wurde nicht ausgliefert und stellt diese immer und immer wieder zu.

Gruß
Noodles

10.10.2007 - 11:08 Uhr

Bitte in [Hinweis] Wie poste ich richtig? Punkt 2 beachten.

10.10.2007 - 07:19 Uhr
dataGridView1.DataSource = theArray;
08.10.2007 - 13:03 Uhr

XPath: XmlDocument.SelectSingleNode(...)

08.10.2007 - 10:20 Uhr

Sowas sollte man selbst herausfinden. Durch testen oder MSDN.

08.10.2007 - 07:39 Uhr

Du solltest aber auch einen Node erzeugen ( XmlDocument.CreateNode ) und kein Attribut.

28.09.2007 - 11:31 Uhr

Und der WebAccess vom TFS reicht nicht aus?

28.09.2007 - 08:31 Uhr

Schau mal auf: http://www.asp.net.

28.09.2007 - 08:30 Uhr

Original von kleines_eichhoernchen
Ich persönlich würde ja auch w2k bevorzugen, allein schon weil es performanter und absturzsicherer ist als Windows Xp.

Das sehe ich nicht so. Bei mir ist es genau das Gegenteil!

28.09.2007 - 06:23 Uhr

Das könnte man doch auch selbst erledigen? Der TFS lässt sich doch programmatisch ansteuern.

28.09.2007 - 06:02 Uhr

Nein es gibt keine Select Abfragen. Schau Dir mal DataSet.Relations an.

27.09.2007 - 21:47 Uhr

Naja, dass sind die neuen Technologien, die mit dem .NET Framework 3.0 mitgekommen sind. Also WCF und WF sind meiner Meinung nach Dinge, die man sich schon mit anschauen sollte.

27.09.2007 - 21:43 Uhr

Wenn Du WPF, WCF usw. nutzen willst, musst Du XP SP2 oder höher als OS haben.

27.09.2007 - 20:21 Uhr

Auf was für Ereignisse willst Du denn reagieren? Wenn sich direkt in der Datenbank etwas ändert?

Mit SqlDependency können Sie Benachrichtigungen empfangen, wenn die ursprünglichen Daten in der Datenbank geändert werden, sodass der Zwischenspeicher erneuert werden kann.

27.09.2007 - 10:58 Uhr

Mit einem DataSet kannst Du Daten offline in Deiner Anwendung halten. Ist für Datenbanken gedacht.

27.09.2007 - 10:42 Uhr

Du kannst auch einfach eine Liste an den Report übergeben.

http://forums.asp.net/t/987664.aspx

27.09.2007 - 08:00 Uhr

Deaktivieren kann die "normale" ComboBox nicht. Entweder Du fügst das gewünschte Verhalten selbst hinzu oder Du schaust mal, ob es evtl. was auf codeproject gibt.

27.09.2007 - 07:53 Uhr

Entferne doch die nicht benötigten Elemente.

27.09.2007 - 07:18 Uhr

Original von webdesign-wild
Aber des muss doch gehen, dass der die Beziehungen, die ich in Microsoft Access erstellt hab automatisch erkennt, oder ?

Das wurde doch schon geschrieben.

Entweder per designer ein TypedDataSet erstellen [...]

27.09.2007 - 07:04 Uhr

Original von v.wochnik
Wie soll ich das machen??

Mit den Klassen aus dem XML Namespace.