Laden...

Forenbeiträge von mipa_acc Ingesamt 318 Beiträge

20.11.2018 - 17:06 Uhr

Hallo liebe Mitbenutzer des Forums,

vielen Dank für eure Informationen. Wie ihr schon bemerkt habt bin ich außerhalb des Frameworks wirklich nicht versiert, deshalb auch so eine unproffesionelle Fragestellung. Leider ist es mit meinem Wissensstand nicht leicht, sich einen roten Faden durch die Webentwicklung anzulesen, durch eure Beiträge wird mir das sicherlich leichter fallen. Vielen Dank schonmal dafür. Ich werde mir nun im Detail eure Infos durchlesen und mich dann ggf. an dieser Stelle wieder melden.

Viele Grüße
mipa_acc

20.11.2018 - 11:05 Uhr

Hallo liebe Community,

ich komme eher aus der Backend, bzw. Serverentwicklung und hatte bisher recht wenig mit Frontendentwicklung, bzw. Webapplikationen am Hut. Das soll sich nun ändern, da ich gerne für ein privates Projekt eine Webseite zur Darstellung von Informationen umsetzen möchte. Dieses Projekt ist durch einen Windows-Dienst (.Net Framework 4.6.2) in Verbindung mit einer SQL-Datenbank realisiert. Konkret sollen unterschiedlichste Elemente wie Text, Bilder oder Tabellen aus der Datenbank dargestellt werden. Auch sollen über die Webseite ein paar Funktionen des Dienstes angestoßen werden können.

Nun habe ich mich etwas eingelesen, bin aber von der Fülle an Informationen etwas überfordert. Ich wende mich an euch, da ich gerne mit aktuellen Technologien arbeiten will, aber mir nicht ganz sicher bin, was man denn für solch eine Angelegenheit verwendet. Was ich weiß: Die Web-Applikation muss nicht auf Linux laufen, weshalb ich gut auf .Net Core verzichten kann.
_
Somit seht für mich fest, ich würde gerne ASP.NET als Framework verwenden. Ist es nun ratsam, mit WebForms zu arbeiten, also mit XHTML und CodeBehind-Daten oder Mit Asp.Net MVC? Da wäre rein von der Architektur her eine bessere Trennung von Funktionen und Aussehen der Inhalte gegeben. Verwendet man da dann die Version 4 oder 5? Sollte man RazorPages verwenden, bzw. in wie fern bringt mir das Vorteile?_

Vielleicht kann mir jemand von euch bei ein paar Entscheidungen helfen. Allem voran ist meine Intention dieses Beitrags auch anderen Entwicklern aufzuzeigen, was es denn Stand Ende 2018 für Möglichkeiten gibt.

Vielen Dank schon mal für eure Unterstützung!
Gruß mipa_acc

11.06.2016 - 14:13 Uhr

Vielen Dank Abt, wenn ich hinter meinen String ein \r schreibe, dann läuft die Sache!

Danke 😃

09.06.2016 - 10:36 Uhr

Hallo,

erstmal vielen Dank für eure Antworten!

Wenn ich Debugge, dann stehen alle Werte passend da. Mein senderSock-Objekt (also ein Objekt vom Typ Socket) hat keine Flush-Methode.

Ich muss dazu sagen, dass ich .Net Entwickler bin und mit Miktocontroller (leider) sehr wenig am Hut habe. Deshalb verstehe ich das mit dem CR/LF leider nicht. Googeln erhab Carriage Return, also ein /n am Ende des Strings (wie in C) - oder? Das habe ich auch bereits getestet, hatte aber keine Auswirkungen.
Mit Wireshark habe ich noch nicht gearbeitet, muss ich heute Abend mal testen. Ich hoffe, ich schaffe es, die Filter passend anzupassen.

Sonst noch irgendwelche Ideen?

Vielen Dank!

08.06.2016 - 18:53 Uhr

Hallo liebe Community,

ich stehe gerade etwas auf dem Schlauch. Ich habe einen Mikrocontroller (ESP 8266) und will an diesem mittels eines TCP Pakets einen Ausgang schalten. Dies funktioniert mit einem kleinen Tool sehr gut (siehe Anhang):
Wenn ich den ASCII Code 2x4x0 sende, wird ein Ausgang geschaltet - erfolgreich.

Selbiges will ich mit diesem Code, welcher auf dem selben PC ausgeführt wird (wegen Firewall, AV, etc.) erreichen:


private void Connect_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // Resolves a host name to an IPHostEntry instance                            
                IPHostEntry ipHost = Dns.GetHostByName("192.168.148.189");

                // Gets first IP address associated with a localhost 
                IPAddress ipAddr = ipHost.AddressList[0];
        
                // Creates a network endpoint                  
                IPEndPoint ipEndPoint = new System.Net.IPEndPoint(ipHost.AddressList[0], 9274);
                
                // Create one Socket object to setup Tcp connection 
                senderSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                senderSock.NoDelay = false;  

                // Establishes a connection to a remote host 
                senderSock.Connect(ipEndPoint);
                tbStatus.Text = "Socket connected to " + senderSock.RemoteEndPoint.ToString();

                Connect_Button.IsEnabled = false;
                Send_Button.IsEnabled = true;
            }
            catch (Exception exc) { MessageBox.Show(exc.ToString()); }

        }

        private void Send_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // Sending message 
                string theMessageToSend = tbMsg.Text;
                //theMessageToSend = 2x4x0
                byte[] msg = Encoding.ASCII.GetBytes(theMessageToSend);

                // Sends data to a connected Socket. 
                int bytesSend = senderSock.Send(msg);

                ReceiveDataFromServer();

                Send_Button.IsEnabled = false;
                Disconnect_Button.IsEnabled = true;
            }
            catch (Exception exc) { MessageBox.Show(exc.ToString()); }
        }

IP Adresse sowie Port passt. Verbinden kann ich mich auch. Nur wenn ich die Nachricht sende, passiert nichts.

Da wir uns hier in Schicht 4 bewegen schließe ich irgendwelche "Sicherheitsfunktionen", welche in .Net standardmäßig aktiv sind (wie z.B. "HttpWebRequestElement.UseUnsafeHeaderParsing" bei HTTP Requests, Schicht 7) aus. Ich komme nur leider nicht drauf, was in meinem Beispiel anders ist, als in dem kleinen Tool. Wohlgemerkt geht es mir hier erstmal um das reine senden, wenn das läuft, dann kümmere ich mich um das Empfangen der Antwort (wie es ja auch mein kleines Tools macht).

Habr ihr einen Tipp für mich?

Viele Grüße
mipa_acc

25.06.2015 - 21:44 Uhr

Manchmal geht es schneller als gedacht...

für alle die dasselbe Problem haben. In der App.config, einfach dem startup noch eine weitere Einstellung "mitgeben":


    <startup useLegacyV2RuntimeActivationPolicy="true">
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />       
    </startup>

Problem gelöst 😃

25.06.2015 - 21:40 Uhr

Hallo Community,

ich habe ein Problem, welches ich leider nicht alleine lösen kann. Mir fehlt da einiges an Basiswissen.

Ich will in meiner Applikation (Windows.Forms, .Net 4.5) funktionalitäten von DLLs verwenden, welche ziemlich alt sind. Die Laufzeitversion von diesen DLLs ist 1.1.4322. In Google habe ich einige Informationen gefunden, welche mich aber nicht wirklich weiter gebracht haben. Aktueller stand ist, dass ich in der App.config in der startup Sektion folgenden Einträg ergänzt habe:


<supportedRuntime version="v1.1.4322" />

Nun erhalte ich beim Ausführen einer Methode der DLL statt der Meldung

Die Assembly im gemischten Modus wurde während Version v1.1.4322 der Laufzeit erstellt und kann nicht während der 4.0-Laufzeit ohne zusätzliche Konfigurationsinformationen geladen werden.

folgendes:> Fehlermeldung:

Die Datei oder Assembly "Blub.dll" oder eine Abhängigkeit davon wurde nicht gefunden. Eine DLL-Initialisierungsroutine ist fehlgeschlagen. (Ausnahme von HRESULT: 0x8007045A)

Leider bin ich mit meinen Latein am Ende. Auch in Google finde ich nichts wirklich passendes. Warscheinlich suche ich mit den falschen Begriffen...

Könnt Ihr mir weiter helfen?

Viele Grüße
mipa_acc

01.05.2015 - 17:25 Uhr

Ich kann die PluginLevels Klasse Serialisieren! Das ist das spannende, bzw. das, was ich nicht verstehe...

Leider kann ich auch nicht in die inner Exception sehen, da ich keine habe. Beim Debuggen bekomme ich keinerlei Fehler. Ich bekomme die Fehlermeldung im WCF-Testclient.

Ich versuche jetzt mal - wie von Taipi88 vorgeschlagen, die config so anzupassen,
dass ich bessere Fehlermeldungen bekomme.

Wenn es jemanden Interessiert, ich stelle auch gerne den Code zur Verfügung.

01.05.2015 - 14:40 Uhr

Hallo,

so, Logging ist implementiert, hätte ich aber eigentlich nicht gebraucht, jetzt wird´s richtig interessant!

Ausschnitt aus meiner WcfService.svc.cs


        public AvailablePluginLight GetLightPlugin(Guid guid) {

            try {

                //Go through all Available Plugins
                foreach (AvailablePlugin currentPlugin in PluginContainer.AvailablePlugins) {

                    if (currentPlugin.Guid == guid) {

                        return new AvailablePluginLight(currentPlugin.Instance.Name,
                                                                currentPlugin.Instance.Description,
                                                                currentPlugin.Instance.Author,
                                                                currentPlugin.Instance.Version,
                                                                currentPlugin.Instance.PluginType,
                                                                currentPlugin.Instance.Guid,
                                                                currentPlugin.Instance.ClientGuiOutput,
                                                                currentPlugin.Instance.Level);

                    }

                }

                return new AvailablePluginLight();

            } catch (Exception ex) {

                Logging.SetErrorMessage("Test", ex);

            }

            return new AvailablePluginLight();

        }   <--- Ich gehe an dieser Stelle mit F11 rein

Ich erhalte mein Objekt incl. alle PluginLevel Daten! Am Ende der Methode gehe ich mit F11 weiter. Ich gelange beim Debuggen dann in meine AvailablePluginLight - Klasse, wo ich alle Getter von den Properties durchgehe. Beim return von meinem Level Scheppert´s dann:


//Ausschnitt aus der AvailablePluginLight Klasse
        [DataMember]
        public PluginLevel Level {
            get {
                return _Level;  <-- Hier ist der Ofen aus
            }
            set {
                _Level = value;
            }
        }

Ich erhalte die selbe Meldung, welche ich in Obigen Post bereit erwäht habe ( "bei System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)").

Weiter habe ich einfach mal eine Methode in meiner WcfKlasse, die Funktioniert wie folgt erweitert:


      public List<string> GetPluginWorkMethodes(Guid guid) {

            try {
                 AvailablePluginLight Blub = GetLightPlugin(new Guid("43cd6dc4-22a9-4c27-b866-a1bcbcc384ff"));
            } catch (Exception ex) {

                Logging.SetErrorMessage("Test aus funktioniertender Methode", ex);

            }

            List<string> MyList = new List<string>();
            ....
       }

Ich gelange nicht in den Catch-Block, sondern erhalte mein Objekt - so wie es sein soll (incl. PluginLevel)! Die Methode läuft nach wie vor ohne den Fehler durch.

Leider bin ich im WCF-Service Thema wirklich nicht sonderlich gut... Für mich erhärtet sich der Verdacht, dass es irgendwas mit der Übertragung zu tun hat.

Was denkt ihr?

Viele Grüße

30.04.2015 - 15:04 Uhr

Alles klar, dann werde ich das heute Abend umsetzen. Rein Logisch kann es aber fast an nichts anderem liegen, dass die PluginLevel - Klasse während der Laufzeit nicht vom WcfService verarbeitet kann - oder?

30.04.2015 - 14:20 Uhr

Ist erledigt. Exakt gleiches Verhalten + Fehler.meldung Das hatte ich vor meinem Post bereits getestet, allerdings nicht rein geschrieben. Sorry.

Ich habe auch schonmal getestet, die Namespaces in den Attributen weg zu lassen - auch gleiches Verhalten + Fehlermeldung.

AvailablePluginLight + PluginLevel haben nun nur noch bei den Properties das DataMember Attribut. Keine der verwendeten klassen hat mehr eine Angabe des Namespace im ServiceContract. Also verwenden alle tempuri.org (habe ich in dem Buch gelesen).

30.04.2015 - 13:16 Uhr

Hallo,

erstmal sorry, dass ich die Fehlermeldung nicht genauer spezifiziert habe. Das liegt allerdings daran, dass ich euch auch nicht genau sagen kann, was nicht past. Ich sehe nur, dass der Server beendet wurde. Folgende Meldung erhalte ich:

Fehlermeldung:
Fehler beim Empfangen der HTTP-Antwort für
>
. Die Ursache kann sein, dass die Dienstendpunktbindung kein HTTP-Protokoll verwendet. Eine andere mögliche Ursache ist, dass der HTTP-Anforderungskontext vom Server abgebrochen wird (vermutlich auf das Herunterfahren des Diensts zurückzuführen). Weitere Informationen finden Sie in den Serverprotokollen.

Server stack trace:
bei System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException, HttpWebRequest request, HttpAbortReason abortReason)
bei System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
bei System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
bei System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
bei System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
bei System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
bei System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

Exception rethrown at [0]:
bei System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
bei System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
bei IWCFService.GetAllPlugins()
bei WCFServiceClient.GetAllPlugins()

Inner Exception:
Die zugrunde liegende Verbindung wurde geschlossen: Unbekannter Fehler beim Empfangen..
bei System.Net.HttpWebRequest.GetResponse()
bei System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)

Inner Exception:
Von der Übertragungsverbindung können keine Daten gelesen werden: Eine vorhandene Verbindung wurde vom Remotehost geschlossen.
bei System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
bei System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size)
bei System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead)

Inner Exception:
Eine vorhandene Verbindung wurde vom Remotehost geschlossen
bei System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
bei System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)

Leider weiß ich nicht, wie ich an bessere Fehlermeldungen kommt. Ich erhalte obige Meldung an dem Punkt im Code, an dem ich im AvailablePluginLight - Objekt das PluginLevel-Objekt im Getter zurück gebe, also bei:

Dass irgendwas mit der Verbindung nicht passt schließe ich aus, da ich ja - wenn ich keine Plugins in der AvalablePluginLight - Klasse verwende, alles klappt.


   [DataMember]
        public PluginLevel Level {
            get {
                 return _Level;  //<-- Erzeugt die obige Meldung
            }
            ...

Frage:
Gibt es eine Möglichkeit, wie ich an genauere Fehlermeldungen komme?

Vielen Dank für euer bemühen!

29.04.2015 - 19:12 Uhr

Hallo Community,

anscheinend habe ich einen grundlegenden Denkfehler in meinem Projekt. Denn nirgends finde ich jemanden, der eine ähnliche Problematik hat. In Fachbüchern wie z.B. "Verteilte Systeme und Services mit .NET 4.5" habe ich diesbezüglich auch nichts gefunden.

Foldender Aufbau:
Der Aufbau meines Projekts befindet sich im Anhang.

In meinem WcfService habe ich unter anderem folgenden OperationContract:


    ...
    namespace HomeCom.Server {
    ...

    [ServiceContract(Namespace = "http://HomeCom.Server.WCFService")]
    public interface IWCFService {

        [OperationContract]
        List<AvailablePluginLight> GetAllPlugins();

        [OperationContract]
       ...
    }

Das AvailablePluginLight hat under anderem folgenden Datamember:


        [DataMember]
        public PluginLevel Level {
            get {
                return _Level;
            }
            set {
                _Level = value;
            }
        }

Die PluginLevel - Klasse sieht so aus. Sie befindet sich in einem anderen Namespace, als die AvailablePluginLight - Klasse, oder der WcfService ist:


...
namespace HomeCom.Server.PluginInterface {
    [Serializable]
    [DataContract(Namespace="http://HomeCom.Server.WCFService")]
    public class PluginLevel {
        [DataMember]
        private string _Layer = null;

        [DataMember]
        private string _Underlayer = null;

        [DataMember]
        private bool _IsUsable = false;

        [DataMember]
        public bool IsUsable { ....   }

        [DataMember]
        public string Layer { ....   }
        }

        [DataMember]
        public string UnderLayer { ....   }

        public PluginLevel() {        }

    }
}


Im Klartext, mein AvailablePluginLight besitzt als Propertie eine eigene erstellte Klasse. Diese liegt allerdings in einem anderen Projekt, also auch in einem anderen Namespace.
Wenn ich meinen WcfService Debugge und anschließend die GetAllPlugins() - Methode aufrufe, erhalte ich einen Fehler, da der Dienst nicht mehr zur Verfügung steht (er ist abgeschmiert).

Folgende Tatsachen habe ich heraus gefunden:
Wenn ich in meiner AvailablePluginLight - Klasse das PluginLevel als Propertie entferne, funktioniert alles wie es soll. Meines erachtens liegt es daran, dass sich die Klasse eben in einem anderen Namespace befindet. Natürlich ist dieser in meinem WcfService als Verweis eingefügt (sonst könnte ich ja nicht mal kompilieren), aber zur Laufzeit, sprich genau dann, wenn ihn meine AvailablePluginLight - Klasse "returnt", stürzt mir mein WcfService ab.

Meine Frage:
Wie schaffe ich es, meinem WcfService während der Laufzeit, die PluginLevel - Klasse "verwendbar" zu machen? Habe es - wie ihr seht - bereits mit den Namespace-Attribut probiert, leider vergebens. Habe ich irgendwo einen Denkfehler?

Vielen Dank erstmal, dass Ihr euch das alles durchgelesen habt.

Gruß
mipa_acc

09.01.2015 - 08:18 Uhr

Hallo Community,
ich habe eine Frage zu „best practise Techniken„ im Bereich Schnittstellen/Plugins und hoffe, dass ich hier im Bereich Basistechnologien richtig bin.

Beschreibung:
Ich habe im Bereich eines Studienprojekts vor, eine Client/Server basierte Software zu erstellen, welche Modular aufgebaut ist. Es handelt sich dabei um ein System, unter dem man verschiedene Netzwerkpheripheriegeräte ansteuern kann. Für jedes Gerät soll man am Server ein Plugin hinzufügen können, welches dann unterschiedliche Funktionen (abhängig von dem Gerät) implementiert.
Folgende Geräte sollen angesteuert im ersten Step werden können:- IP-Power Switches (hier sollen einzelne Ausgänge geschalten werden können)

  • WebCam (Hier soll das Livebild abgegriffen werden)
  • LAN-Intrarot-Sender (Hier soll man verschiedene IR-Signale senden können)
  • Usw.

Mein Plan ist nun, einen Server zu erstellen, dem ich Plugins hinzufügen kann. In jedem Plugin soll die entsprechende Logik implementiert werden.
Man soll auf verschiedene Art und Weise auf den Server zugreifen können. Im ersten Schritt soll das über eine Weboberfläche realisiert werden. Später kann man das noch auf ein Windows-Phone APP, etc. erweitert werden. Der Datenaustausch soll mittels Webservices von statten gehen (dachte ich mir).

Meine Frage ist nun:- Sind Webservices zum Datenaustausch gut, oder gibt es was „geschickteres“?

  • Wie stelle ich es an, dass ich eine Schnittstelle (zwischen Server und den einzelnen Plugins) habe, die so modular ist, dass ich alle möglichen Anwendungsfälle abdecken kann? Das muss irgendwie über Interfaces laufen, leider geht mir da allerdings etwas der Background ab. Gibt es hier irgendwo Literatur oder best practises

Vielen Dank im Voraus für eure Infos!
mipa_acc

24.11.2011 - 07:37 Uhr

Hallo Community,

ich habe ein Problem. Ich würde gerne mit

Process.Start("explorer.exe", Path);

Den Windows Explorer öffnen. Lokal funktioniert das auch wunderbar. Wenn in meiner Path Variable aber @"\10.0.100.50\c$\Windows" steht, funktioniert die ganze Sache nicht mehr.
Das Problem ist mir bekannt -> ich müsste zuersteinmal \10.0.100.50 im Explorer öffnen um mich auf dem Rechner zu authentifizieren. Anschließend ist das mit meinem C# Code auch kein Problem mehr.
Meine Frage ist nun, wie schaffe ich es Codetechnisch, mich vor dem öffnen des Explorers schon passen zu authentifizieren?

Mir wäre auch schon geholfen, wenn ihr mir ein paar Suchbegriffe für Google posten könntet. Hab mich noch nie in diesem Bereich bewegt. Von dem her habe ich leider auch keinen Lösungsansatz.

Gruß

18.11.2011 - 11:15 Uhr

Danke für deine Antwort!

Natürlich habe ich mir die FAQ schon durchgelesen. Ich arbeite ja schon mit Events aber eben nur im Zusammenhang der MainForm und eines UserControls.

Wie gebe ich die Events in der MainForm weiter? Ich steh grad aufm Schlauch. Könntest du mir evtl. ein kurzes Beispiel zeigen?

18.11.2011 - 10:51 Uhr

Hallo,

ich habe ein leichtes Verständnissproblem, bzw. zu wenig Ahnung, wie man folgende Problematik am besten lösen kann.

Erstmal eine kurze Beschreibung:
Auf meiner MainForm liegen unter anderem zwei von mir erstellte UserControlls (Action und Indicator). Ich habe mir diese UserControls erstellt, damit ich nicht ohne Ende Code in meiner MainForm habe und weil es für mich übersichtlicher ist. Die Daten mit denen mein Programm arbeitet stelle ich in einer Statischen Containerklasse (Container) für alle meine Controls bereit. So weit so gut.

Das Problem das ist jetzt habe ist, dass mein Action Control Daten verarbeitet und ich den aktuellen Status in meinem Indicator Control darstellen will. Sprich mein Action Control wirft Events (z.B neue Datei). Leider weiß ich jetzt nicht, wie ich mein Indicator Control dazu bringen kann, sich an diese Events anzuhängen. Kann ich das über meine Container Klasse machen oder gibt es einen eleganteren Weg?
Beide Controls liegen auf meiner MainForm.

Gruß

22.08.2011 - 15:09 Uhr

Hallo Community,

bin mittlerweile etwas aus der Übung geraten... Ich würde mit gerne ein kleines Programm zusammenbauen und habe dazu eine Technische Frage.

Im Grunde will ich ein Verwaltungsprogramm programmieren, welches Plugins laden kann. Das Programm an sich hat keine Funktionen. Es lädt aber beim Systemstart verschiedene DLLs welche sich im Programmordner befinden.
Hintergrund ist folgender: Wir haben verschiedene Abteilungen. Einige davon brauchen dieselben Programmteile, andere haben separate Programmteile und wiederum andere brauchen Programmteile gar nicht. Um alles so übersichtlich wie möglich zu gestalten dachte ich mir, dass ich das mit eben einem Verwaltungsprogramm realisiere und dieses lädt dann je nachdem, welche DLLs hinterlegt sind, verschiedene Programmteile.

Mein Problem ist nun, wie ich es schaffe, dass das Verwaltungstool Dynamisch alle DLLs rein lädt. Bin ich da auf dem richtigen Weg, wenn ich mich mit Interfaces auseinander setze?
Hättet ihr dazu evtl. Links, bzw. ein paar Suchbegriffe unter denen ich das finde was ich brauche?

Vielen Dank im Voraus!

Gruß

21.07.2011 - 10:31 Uhr

Hallo,

ich weise einem RibbonGallery Control Dynamisch RibbonDropDownItems zu.


                foreach (String CurrentLine in System.Text.RegularExpressions.Regex.Split(Sr.ReadToEnd(), "\r\n")) {

                    Microsoft.Office.Tools.Ribbon.RibbonDropDownItem tempRibbonDropDownItem = this.Factory.CreateRibbonDropDownItem();
                    tempRibbonDropDownItem.Label = CurrentLine;
                    tempRibbonDropDownItem.Tag = CurrentLine;                    
                    this.symbolGallery.Items.Add(tempRibbonDropDownItem);
                
                }

Leider finde ich nirgends eine Möglichkeit, auf so ein Item zuzugreifen. Mein Objekt tempRibbonDropDownItem hat kein Click Event (es hat gar keine Event´s). Kann das sein oder mache ich etwas falsch?

Das Click Event des RibbonGallery Control´s wird zwar mit jedem Klick auf ein Item ausgelöst, leider komme ich an dieser Stelle auch nicht weiter. Als Parameter bekomme ich ein Microsoft.Office.Core.IRibbonControl übergeben. Jedoch schaffe ich es nicht, auf das RibbonDropDownItem zuzugreifen.

Wäre für Tipp´s dankbar!

Gruß

26.01.2011 - 16:02 Uhr

Hallo,

ich stehe vor einem riesigen Problem.

Ich habe ein WordAddIn (.Net Framework 4, VSTO4) für Word 2010 geschrieben.

Dieses WordAddIn muss ich all unseren Terminalserver-Usern zur Verfügung stellen.

Mittels ClickOnce habe ich einen installer erstellt. Wenn ich als Terminalserver-User diesen installer ausführe, so habe ich das AddIn in Word zur Verfügung. Voraussetzung ist, dass der Terminalserver-User schreibrechte in dem Dateispeicherort für die Ausbeitsgruppenvorlagen hat. Dann funktioniert alles wunderbar.

Mein Problem ist, dass wir ca. 100 Terminalserver-User auf 8 Terminalserver verteilen. Ich müsste jetzt für jeden User auf jedem der 8 Server das ClickOnce Setup ausführen, damit alle User auf allen Servern mit dem AddIn arbeiten können.

Das ist nicht wirklich Optimal. Jetzt habe ich gesehen, dass es für Word auch ein AddIn von OneNote gibt. Hier müsste man einfach die DLL des AddIns (diese könnte ich in auf ein Netzlaufwerk legen) einfach in Word importieren. So in der Art würde ich auch gerne mein AddIn zur Verfügung stellen.

Stellt sich für mich nur die Frage, wie ich mein AddIn als DLL zur verfügung stelle. Habe bisher leider nicht wirklich etwas darüber gefunden.

Habt ihr evtl. ein paar Tipp´s für mich?

Gruß

19.01.2011 - 09:42 Uhr

Hallo,

ich habe ein WordAddIn für Word 2010 geschrieben und will es mit ClockOnce ausbringen. Ich arbeite mit dem VS 2010 und VSTO4.

Folgende Konstellation: Mein Setup liegt auf unserem NAS im Netzwerk. Mittels einem kleinen Script starte ich beim Anmelden eines Users am Terminalserver die Setup.exe auf meinem Nas. So will ich mir die Manuelle Installation aller User ersparen. Es handelt sich hierbei doch um fast 120 Leute.

Wenn mein Setup nun bei der Anmeldung gestartet wird erhalte ich folgende Fehlermeldung: Customized functionality in the application will not work because the certificate used to sign the deployment manifest for ExOffTag or its location is not trused.

Folglich bin ich her gegangen und habe mittels einer MSDN Hilfeseite folgendes gemacht:
In meinen Projekteigenschaften habe ich mit unter Signing ein neues Test-Zertifikat erstellt. Folglich habe ich in meinem Projekt eine neue *.pfx Datei (ExOffTab.Gui_Cert.pfx) erhalten. Diese Datei habe ich auf meinen Terminalservern kopiert und in den beiden Speichern (Vertrauenswürdige Stammzertifizierungsstellen und Vertrauenswürdige Herausgeber) installiert.
So wie es auf der Hilfeseite beschrieben war.
Dann habe ich mich sehr gefreut, weil bei der ersten Anmeldung von einem TS-User hat die ganze Sache auch funktioniert. Aber leider nur einmal. Beim zweiten User hat´s schonwieder nicht mehr geklappt.

Nun bin ich ganz ehrlich etwas ratlos... Wenn ich das Zertifikat erneut auf den Terminalservern installiere, dann funktioniert´s wieder einmal.

Habe ich irgendetwas übersehen oder kann es an dem liegen, dass ich den Pfad wo die Setup Datei liegt irgendwo noch als Vertrauenswürdig deklarieren muss?

Gruß

28.12.2010 - 11:43 Uhr

Hallo,

ich versuche verzweifelt, den namen meines Tab´s in dem Word 2010 Ribbon während der Laufzeit zu aktualisieren.

Habt ihr eine Idee, welche Methode ich da verwenden kann?

Ich gehe mal sehr stark davon aus, dass ich das von Word selbst aus machen muss. Deshalb suche ich in der Word-Klasse Application nach einem Refresh oder ähnliches. Bisher habe ich nur ScreenRefresh() gefunden, das bringt aber leider nichts.

Gruß

21.10.2010 - 08:30 Uhr

Vielen Dank für eure Antworten!

Hatt zusätzlich vergessen, alle Prozesse aller Benutzer und in allen Sitzungen anzuzeigen.

Gruß

19.10.2010 - 09:34 Uhr

Hallo,

ich hänge gerade an einem etwas merkwürdigem Problem was ich leider nicht nachvollziehen kann...

Als erstes muss ich euch sagen, dass es das erste mal ist, dass ich einen Windows Dienst mit Vistual Studio 2010 programmiere. Habe das bisher immer mit dem 2008er Studio gemacht.

Visual Studio habe ich mit Administratorrechten geöffnet.

Anschließend habe ich ein neues Projekt (WindowsService) erstellt.

In meiner Service1.cs lasse ich mir beim Starten des Dienstes nach einem Sleep von 10 Sekunden in mein TEMP Verzeichnis eine Datei erstellen (ist ja nur ein Testprojekt).

Nun klicke ich im Designer meiner Service1.cs Datei mit der Rechten Maustaste und füge einen Installer hinzu.

Ich kompilliere mein Projekt und installiere den Dienst mit der VS Eingabeaufforderung (mit Adminrechten gestartet). Dies mache ich indem ich das installutil verwende.

Nun sehe ich den Dienst in der Windows MMC. Wenn ich den Dienst Starte wird auch meine Datei angelegt.

Zu meinem Problem komme ich wenn ich Debuggen will -> Ich starte den Dienst. Nun setzte ich meinen Breakpoint und gehe unter dem Registerreiter "Debug" auf "Attach to process". Jetzt kann ich mich auf alle Dienste drauf schalten außer auf meinen Testdienst. Dieser ist nämlich ausgegraut.

Leider habe ich überhaupt keinen Plan warum das so ist. Könnt Ihr mir da helfen?

Vielen Dank im Voraus.

Gruß
mipa_acc

05.07.2010 - 13:53 Uhr

Hallo,

in dem neuen Word (2007) in dem Tab Einfügen gibt es einen Button namens Schnellbausteine. Hier wählt man dann den Organizer für Schnellbausteine aus.

Nun findet man einige Standardvorlagen. Unter anderem sind hier aber auch die Autotexte meiner zusätzlich eingebundenen Vorlagendatei (Content.dotm) zu finden.

Ich würde gerne aus meinem C# AddIn solche Autotexte in dem aktuall vorhandenen Dokument einfügen.

Hat irgendwer eine Idee wie ich das realisieren kann?

Hätte auch schon daran gedacht, dieses Einfügen meiner Autotexte mittels dem Makroaufzeichungstool aufzuzeichnen und dann dieses Makro aus meinem C# WordAddIn auszuführen.
Finde das aber eine eher umständliche und nicht saubere Lösung.

Vielen Dank im Voraus!

Gruß

28.06.2010 - 14:43 Uhr

Hallo Community,

ich bin gerade dabei mir ein WordAddIn zu Programmieren, mit dem ich unter anderem per Klick auf einen Button einen Schnellbausten einfügen will.

Da ich noch nie ein WordAddIn programmiert habe tu ich mich da relativ hart.

Ich gehe jetzt erstmal so vor, dass ich mir eine Statische Container Klasse erstelle, in der ich auf das aktuelle Word Dokument verweise. Diesen Verweis stelle ich gleich beim starten des AddIns in der Methode ThisAddIn_Startup her.

Sobald der User nun auf den Button klickt, lese ich den aktuellen Benutzername aus und füge anschließend einen Autotext ein.

Leider habe ich bisher nirgends in Erfahrung bringen können, wie ich Codetechnisch einen Autotext einfüge.

Hättet ihr da evtl. einen Link, CodeSnippet oder ähnliches zum nachlesen?

Gruß

16.06.2010 - 12:35 Uhr

Alles klar!

Vielen Dank. Dann komm ich klar.

Gruß

16.06.2010 - 11:31 Uhr

Hallo,

ok, das leuchtet mir ein, dass es ihn da beim Deserialisieren wirft...

Aber wie kann ich das umgehen?

Ich muss da -1 stehen haben, sonst bekomme ich probleme, wenn ich mit einer Foreach Schleife über meine Klasse gehe...

Sorry, steh etwas aufm Schlauch.

Gruß

16.06.2010 - 10:39 Uhr

Verdammt... hab den Wald vor lauter Bäumen nicht gesehen.

Vielen Dank!

Irgendwie hab ich aber trotzdem noch das Problem, dass der XMLSerializer trotz dem [XmlIgnore] Attribut des Current Propertie versucht zu deserialisieren... Hab ich da noch was übersehen?


        #region Properties
        public List<WordUser> Content {
            get { return _Content; }
            set { _Content = value; }
        }

        /* Needed since Implementing IEnumerator*/
        [XmlIgnore]
        public object Current {
            get {
                return _Content[_Position];
            }
        }
        #endregion

Gruß

16.06.2010 - 09:36 Uhr

Hallo,

ich habe ein Problem. Ich habe eine Klasse (WordUserList) ich ich serialisiert habe. Wenn ich die XML nun wieder deserialisieren will, bekomme ich eine OutOfRange Exception. Ich bin völlig ratlos warum dies so ist.

So sehen meine Klassen aus:


  //Hier müssen alle Typen angegeben werden, mit denen ich in der WordUserList arbeite.
    //Das Problem ist, dass der Serialisierungsvorgang on the fly passiert. Deswegen muss ich vorher schon angeben,
    //mit welchen selbstgeschriebenen Klassen ich arbeite, dass der XMLSerializer das Schema meiner Klassen kennt.
    [Serializable]
    [XmlInclude(typeof(WordUser))]
    [XmlInclude(typeof(Department))]
    public class WordUserList :IEnumerable, IEnumerator {

        [XmlIgnore]
        private int _Position = -1;

        private List<WordUser> _Content;

        #region Properties
        
        public List<WordUser> Content {
            get { return _Content; }
            set { _Content = value; }
        }
        #endregion

        /* Needed since Implementing IEnumerable*/        
        public IEnumerator GetEnumerator() {

            return (IEnumerator)this;
        
        }

        /* Needed since Implementing IEnumerator*/        
        public bool MoveNext() {

            if (_Position < _Content.Count - 1) {

                _Position++;
                return true;
            } else {

                return false;
            
            }
        
        }

        /* Needed since Implementing IEnumerator*/        
        public void Reset() {

            _Position = -1;
        
        }

        /* Needed since Implementing IEnumerator*/        
        public object Current {
            get {
                return _Content[_Position];
            }
        }
                
        public WordUserList() {

            _Content = new List<WordUser>();

        }
                
        public void Add(WordUser user) {

            _Content.Add(user);
        
        }
                
        public void Add(object user) {

            

        }
                
        public void SaveList() {

            SaveTheList(@"S:\Allgemein\Word_2007_Makros\ExOffTab.xml");
        
        }
                
        public void SaveList(string path) {

            SaveTheList(path);

        }
                
        private void SaveTheList(string path) {

            try {

                XMLHelper.SaveInXml(this, path);

            } catch {

                System.Windows.Forms.MessageBox.Show("Fehler beim speichern der ExOffTab.xml", "ExOffTab.Core", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
            
            }
            
        
        }



    [Serializable]
    [XmlInclude(typeof(Department))]
    public class WordUser {

        private string _Name;
        private List<Department> _AllowedDepartments;
        private string _LastUsedTemplate;
        private string _LastUsedName;
        private string _LastUsedPrinter;


        public string UserName {
            get { return _Name; }
            set { _Name = value; }
        }

        public List<Department> AllowedDepartments {
            get { return _AllowedDepartments; }
            set { _AllowedDepartments = value; }
        }

        public string LastUsedTemplate {
            get { return _LastUsedTemplate; }
            set { _LastUsedTemplate = value; }
        }

        public string LastUsedName {
            get { return _LastUsedName; }
            set { _LastUsedName = value; }
        }

        public string LastUsedPrinter {
            get { return _LastUsedPrinter; }
            set { _LastUsedPrinter = value; }
        }

        public WordUser() { 
        
        
        }

    }


    [Serializable]
    public enum Department {

        Fertigteile,
        Garagen,
        Holzbau,
        Bausanierung,
        Verwaltung,
        Komplettbau,
        IngBuero,
        Leipzig,
        CSV,
        Dahmit

    }


 public class XMLHelper {

        public static WordUserList LoadFromXml(string pathToFile) {

            WordUserList tempBase = new WordUserList();

            XmlSerializer xmlSer = new XmlSerializer(typeof(WordUserList));
            FileStream myStream = new FileStream(pathToFile, FileMode.Open);
            tempBase = (WordUserList)xmlSer.Deserialize(myStream);

            myStream.Close();

            return tempBase;
        }


        public static void SaveInXml(WordUserList wordUserList, string savepath) {

            XmlSerializer xmlSer = new XmlSerializer(typeof(WordUserList));
            FileStream myStream = new FileStream(savepath, FileMode.Create);
            xmlSer.Serialize(myStream, wordUserList);

            myStream.Close();

        }


    }

Ich bekomme nicht direkt einen Fehler, sondern Sobald die XML Datei wieder deserialisiert wird ( tempBase = (WordUserList)xmlSer.Deserialize(myStream); ) steht in meinem tempBase Objekt bei der Propertie Current diese System.ArgumentOutOfRange Exception.

Könnt Ihr mir bitte etwas auf die Sprünge helfen... Kapier´s leider grad gar nicht.

Vielen Dank im Voraus!

Gruß

14.06.2010 - 10:42 Uhr

Hallo,

ich suche eine Möglichkeit, möglichst Resourcenschonen ein DirectoryEntry-Objekt eines AD Benutzers zu bekommen.

Aktuell mache ich das (zugegeben sehr umständlich) so:


        private string GetCompanyFromAd(string username) {

            DirectoryEntry MyDirectoryEntry = new DirectoryEntry("LDAP://BLUB");            

            DirectorySearcher DirSearcher = new DirectorySearcher(MyDirectoryEntry);
            DirSearcher.Filter = "(&(objectClass=user)" +
                                 "(SamAccountName="+ username +"))";

            foreach(SearchResult result in DirSearcher.FindAll()) {

                DirectoryEntry DE = new DirectoryEntry(result.Path);
                string test = DE.Properties["givenname"].Value.ToString();
            
            }

            return "";
        
        }

Ich kann doch sicherlich irgendwie direkt ein DirectoryEntry Objekt von meinem Benutzer erstellen... Meim Problem ist nur, dass ich diesen LDAP String nicht zusammen bekomme.
In der foreach Schleife wird aktuell folgendes übergeben:
"LDAP://BLUB/CN=user999,OU=Sachbearbeiter,OU=900_Verwaltung,OU=Blub,DC=Blub,DC=Blub"

Leider kann ich diesen String nicht verwenden und nur den Benutzername austauschen, da wir mehrere Abteilungen haben. Sprich OU= müsste auch immer angepasst werden, wobei ich das nirgends auselsen kann.

Google schon seit einer Stunde rum, komm aber irgendwie auf nichts, dass effektiver ist.

Bitte um eure Hilfe.

Vielen Dank!

Gruß

12.04.2010 - 08:58 Uhr

Hallo,

weiß von euch jemand, wie ich feststellen kann, ob eni Prozessor 32 oder 64 bit hat?

Gruß

23.07.2009 - 16:46 Uhr

Hallo,

ich will in meinem Programm HTML Code darstellen...

Der sieht in etwa so aus:
<div id="news">
<b>Überschrift</b><br>
Inhalt der Überschrift
</div>

Die Inhalte werden aus einer Datenbank geladen.

Mein Problem ist jetzt nur, dass ich bisher keine Möglichkeit gefundne habe, auf einfache Weise diesen HTML Code in meinem C# Programm dar zu stellen.

Ich hatte mir schon gedacht, dass ich irgendwie mit Hilfe des IIS die Seite Lokal lege und dann mit dem WebBrowser lokal auf den IIS verlinke. Das ist mir ehrlich gesagt aber zu viel Arbeit.

Gibts da etwas besseres?

Vielen Dank im Voraus

MfG

19.06.2009 - 14:09 Uhr

Hi,

wie viele Eingträge hast du den in deinen Netzwerkverbindungen?
Hast du evtl. Hamachi oder ähnliche Scherze installiert? Da würdest du auch eine weitere Mac Adresse bekommen...

1394 der Firewire Port
Irda ist Infrarot
Modem ist ein Gerät mit dem man ins Internet gehen kann 😃

Gruß

12.06.2009 - 10:12 Uhr

Hallo,

ich habe hier im Forum schon viel gesucht, aber leider nichts gefunden mit dem ich mein Problem lösen kann.

Ich bin gerade am Setup erstellen. Mein Programm läuft mit dem .Net Framework 2.0. Ich habe in jedem Projekt eingestellt, dass es auf 2.0 läuft. In dem Setup Projekt habe ich bei den Launch Conditions eingestellt, dann die Version 2.0.50727 benötigt wird. Was mit hier schon seltsam vorkommt ist, dass ich ein Ausrufezeichen in dem Icon habe. Das ist aber auch so, wenn ich die Version auf 3.5.21022 einstelle.

Das seltsame ist jetzt nur, wenn ich das Programm installieren will, sagt mir das Setup, dass ich die Version 3.5 brauche.

Woran könnte das liegen?

08.05.2009 - 11:11 Uhr

Hallo,

ich habe es so gemacht, dass ich einfach die Grafik der Klasse kopiert habe, in Visio eingefügt und dann nur die Verbindungen manuell erstellt hab.

MfG

08.05.2009 - 11:06 Uhr

Hallo,

kennt jemand von euch ein Snippet, mit dem ich Zahlen in Text umwandeln kann? Brauche es für ein Programm mit dem ich Spendenquittungen erstellen kann.

Das heißt wenn ich 217,85 habe will ich den Text ZweihundertSiebZehn und FünfundAchzig haben.

Mir würde es reichen, wenn es bis 9999 gehen würde.

Sowas müsste es doch schon irgendwo geben oder?

Vielen Dank im Vorraus

MfG

06.05.2009 - 08:46 Uhr

Hallo,

ist es irgendwie möglich, dass ich mein Klassendiagramm (erstellt in VisualStudio 2008) in Visio 2007 importiere?

Hab schon rumgesucht aber leider keine Möglichkeit gefunden.

MfG

05.05.2009 - 11:28 Uhr

Hallo,

ich verwende Word2007 und bin gerade dabei ein AddIn für dieses zu programmieren. Klappt bis jetzt auch wunderbar.

Ich habe eine docx Datei auf meiner Festplatte die ich gern in dem aktuell offnen Word öffnen willl.

Wenn ich mittels Application.Documents.Open(...) diese Datei öffne, dann erscheint eine neue Instanz von Word. Das will ich nicht. Ich will diese Datei gerne ich dem Word öffnen in dem ich auch das AddIn geladen habe.

Es gibt da ein Attribut namens Parent. Das hört sich für mich schonmal gut an, ich weiß aber leider nicht so ich diesen Parten her bekommen soll... Da das Attribut vom Typ Object ist weiß ich auch nicht was er hier erwartet...

Hatt jemand eine Idee wie ich das realisieren kann?

MfG

25.03.2009 - 23:42 Uhr

Hallo,

ich habe ein Problem...

Ich habe sehr viele Dateien auf meiner Festplatte. Die Dateinamen haben alle möglichen Sonderzeichen etc.
Ich hab ein Programm das mit diese Dateien an einen FtpServer sendet. Ich Arbeite hier mit Sockets. Das funktioniert auch soweit wunderbar (wenn die Dateinamen keine Sonderzeichen enthalten).

Hier der Code mit dem ich meine Daten sende:



       Socket cSocket = createDataSocket();
       long offset=0;

       if(resume)
       {

         try
         {

           setBinaryMode(true);
           offset = getFileSize(file.FullName);

         }
         catch(Exception)
         {
           offset = 0;
         }
       }

       if(offset > 0 )
       {
         sendCommand("REST " + offset);
         if(retValue != 350)
         {
           //throw new IOException(reply.Substring(4));
           //Remote server may not support resuming.
           offset = 0;
         }
       }

       sendCommand("STOR "+Path.GetFileName(file.FullName));

       if( !(retValue == 125 || retValue == 150) )
       {
         throw new IOException(reply.Substring(4));
       }

       FileStream input = new FileStream(file.FullName,FileMode.Open);

       if(offset != 0)
       {

         if(debug)
         {
           Console.WriteLine("seeking to " + offset);
         }
         input.Seek(offset,SeekOrigin.Begin);
       }

       Console.WriteLine("Uploading file "+file.FullName+" to "+remotePath);

       while ((bytes = input.Read(buffer,0,buffer.Length)) > 0)
       {
         //Hier wird die Datei gesendet. die Datei auf dem Ftp hat den selben Name wie file.Name
         cSocket.Send(buffer, bytes, 0);

       }
       input.Close();

       Console.WriteLine("");

       if (cSocket.Connected)
       {
           cSocket.Close();
       }

Nun zu meiner eigentlichen Frage: Kann ich den Namen den die Datei auf meinem FtpServer bekommt irgendwie bearbeiten? Hab mir eine Methode geschrieben die mir alle Sonderzeichen entfernt. Nun müsste ich halt nur meinen bearbeitetten Dateinamen irgendwie in das Senden ein bringen. Es gibt in der Socket Klasse eine Methode SendFile, hier könnte ich auch den Dateinamen angeben, allerdings wird das nicht funktionieren, da hier die Gegenstellt den Stream aufnehmen muss und den dann weiter "verwursteln" kann. Diese Möglichkeit habe ich ja mir einenm Ftp nicht.

Wäre für Hile/Denkanstöße sehr dankbar.

Vielen Dank im Voraus.

MfG

28.02.2009 - 02:11 Uhr

Hallo,

mir ist es leider nur ein Rätsel, wie ich den Datenstream in meine Datenbank schreibe. Würde es funktionieren, wenn ich einfach alle inhalte des Arrays in eine Tabelle werfe? Hättest du evtl. ein kurze beispielscript?

Vielen Dank im Vorraus

MfG

28.02.2009 - 00:23 Uhr

Hallo,

ich würde gern ein Bild in eine Sql Datenbank speichern (Sql Server 2005).

Ich habe schon einiges herum probiert. Unter anderem mein Image in ein Byte Array umzuwadeln und dann in die DB zu schießen, hat aber nicht wirklich hin gehauen. Hab da einen Artikel gefunden wie beschrieben wird wie es mit der Enterprise Library 2.0 Data Access Application Block ( DAAB ) geht. Das will ich aber eigentlich nicht.

Normalerweise sollte das doch viel einfach gehen. Hab gesehen, dass es einen Datentyp Image im Sql Server gibt. Gibt´s da keine Möglichkeit einfach ein Objekt vom Typ Image in C# in die Sql Datenbank zu jagen?

MfG

24.02.2009 - 19:55 Uhr

Hi,

habs nun so gelöst, dass ich meine SP umgebaut hab. Sie sieht nun so aus:

exec ('
create procedure stInsertProduct (
@ProductGroupId as nvarchar(100),
@FriendlyName as nvarchar(100),
@ProductDescription as nvarchar(100),
@NewId as int output
)
as
begin

        insert into Product (  
              fk_ProductGroupId,  
              FriendlyName,  
              ProductDescription                    
        )  
        values (  
			  @ProductGroupId,  
              @FriendlyName,  
              @ProductDescription  
        )  
          
        SET @NewId = scope_identity()  
        return   

  end  

')

Und mein Code so:


            SqlConnection Con = new SqlConnection(@"Data Source=GAME-PC\LOCAL;Initial Catalog=Kelmendi;Integrated Security=SSPI");

            Con.Open();

            // SqlCommand vorbereiten 
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = Con;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = spName;

                        
            // Parameter-Auflistung füllen           
            cmd.Parameters.AddRange(parameters);

            //Für die Rückgabe der ID
            cmd.Parameters.Add(new SqlParameter("@NewId", SqlDbType.Int, 4, ParameterDirection.Output, false, 0, 50, "NewId", DataRowVersion.Default, null));
            
            // SqlCommand ausführen 
            SqlDataReader dr = cmd.ExecuteReader();

            Con.Close(); 
            
            return (int)cmd.Parameters["@NewId"].Value;

24.02.2009 - 19:30 Uhr

Hallo,

habe nun alle Vorschläge probiert...


object id = cmd.ExecuteScalar();

ergibt null

in die while schleife geht er mir gleich gar nicht rein. Das hießt ja für mich, dass es nichts zu lesen gibt. Versteh ich einfach nicht 😦

Kann es sein, dass ich bei meiner StoredProcedure noch irgendetwas hinzufügen muss?

Noch irgendwelche andere Ideen? Bin ratlos

24.02.2009 - 18:16 Uhr

Hallo,

ich nutzte Visual Studio 2008. Ich habe eine sehr einfache stored procedure:
ALTER procedure [dbo].[stInsertProduct] (
@ProductGroupId as nvarchar(100),
@FriendlyName as nvarchar(100),
@ProductDescription as nvarchar(100)
)
as
begin

        insert into Product (  
              fk_ProductGroupId,  
              FriendlyName,  
              ProductDescription  
        )  
        values (  
			  @ProductGroupId,  
              @FriendlyName,  
              @ProductDescription  
        )  
          
        return scope_identity()  

  end  

Über folgenden C# Code kann ich diese auch ausführen, allerdings kann ich die Id nicht speichern weil ich irgendwie gar nichts zurück bekomme. Von der Datenbank kommt aber 100% die Id zurück, weil ich es direkt im Studio getestet habe. Es liegt also irgendwie daran, dass ich die SP falsch aufrufe denke ich... hier der code:


            SqlConnection Con = new SqlConnection(@"Data Source=XXX;Initial Catalog=XXXX;Integrated Security=SSPI");

            Con.Open();

            // SqlCommand vorbereiten 
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = Con;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = spName;
            // Parameter-Auflistung füllen           
            cmd.Parameters.AddRange(parameters);

            // SqlCommand ausführen 
            SqlDataReader dr = cmd.ExecuteReader();

            DataSet ds = new DataSet();

            DataTable dt = new DataTable("ReturnValues");

            while (dr.Read())
                dt.Rows.Add(dr[0]);
            dr.Close();
            Con.Close(); 

            return new DataSet();

Habt ihr eine Ahnung warum das so ist?

Vielen Dank im Vorraus

MfG

04.12.2008 - 22:34 Uhr

Habs selber gefunden...

Stand voll aufm Schlauch. In dem Initialisierten DirectoryInfo Objekt gibts eine Medhode namens Parent.

04.12.2008 - 22:32 Uhr

Hallo,

habe schon einiges gegoogelt aber leider nichts gefunden (genau so wie hier im Forum)

Sollte eigentlich etwas anz simples sein... Ich habe ein DirectoryInfo Objekt. Was ich möchte ist einfach eine Ebene höher gehen -> Aus C:\Test\BlaBla soll C:\Test werden.

Vielleicht hab ich auch nur falsch gesucht: DirectoryInfo Ebene höher

Habt ihr eine Idee?

Vielen Dank im Vorraus

27.11.2008 - 16:10 Uhr

Ihr seid echt top!

Genau das was ich gesucht habe... Mercie!

27.11.2008 - 15:50 Uhr

Hallo,

ich hatte mal ein Tool, mit dem ich Methoden von Windows auslesen konnte. Das Programm gab mir auch gleich einen Beispielcode für Consolenanwendungen in VB und C# aus.

Leider weiß ich nicht mehr wie es heißt. Irgendwas mit "w" dachte ich.

Auf alle fälle hab ich in diesem Programm wiederum eine Methode gefunden die mir die Anzahl der Monitore an einem Pc ermittelt.

Kennt evtl. jemand von euch das Programm, bzw. weiß ich wie die Anzhal der Monitore ermitteln kann?

Vielen Dank im Vorraus

MfG

27.11.2008 - 14:59 Uhr

Ja, das ist noch so optimal, da es auch durchaus vor kommt, dass ich 200 Items in der Liste hab...

Evtl. hat ja noch wer eine andere Idee...

Aber trotzdem Dane!