Laden...
O
oehrle myCSharp.de - Member
E-Technik Germany Dabei seit 08.06.2009 461 Beiträge
Benutzerbeschreibung

Forenbeiträge von oehrle Ingesamt 461 Beiträge

28.05.2010 - 08:25 Uhr

verwendetes Datenbanksystem: Access 2003, sql2008

Hallo, ist es möglich, beim verwenden von einem typisierten Dataset auch eine Providerfabrik zu verwenden?
Kann jemand sagen wie man das beim typisierten Dataset macht? Ohne Dataset habe ich das schon gemacht. Ich habe eine größere ANwendung für Access geschrieben und möchte die nun auch für SQL nutzen.

21.05.2010 - 13:35 Uhr

Danke für die Infos, werde das mal in einem Win 98 System testen.

21.05.2010 - 08:58 Uhr

Muß da noch etwas besonderes bei Progammsinstallation beachtet werden? Framework für WIN 98 ??

20.05.2010 - 22:08 Uhr

Hallo, eine Frage die mich seit kurzem beschäftigt. Laufen C# Programme auf Windows 98 Rechnern? Muß da etwas bestimmtes beachtet werden? Hat jemand Erfahrung damit?
Ich denke es ist klar das man das Framework auf dem Rechner braucht.

05.05.2010 - 22:56 Uhr

verwendetes Datenbanksystem: <MSSQL2008>
Hallo, ich übe mich gerade in XML, dabei bin ich auf LINQ gestoßen. Mein Wunsch war es, aus eine Form mit Eingabefeldern Daten auszulesen und mit diesen Daten ein XML-File zu erzeugen. Das XML-File soll hierachisch aufgebaut sein, siehe näcste Zeilen:

<Parameterdaten>
<P1_0>
<_01_02>we</_01_02>
<_01_03>we</_01_03>
<_01_04>we</_01_04>
</P1_0>
<P2_0>
<_02_03>we</_02_03>
<_02_04>we</_02_04>
<_02_10>we</_02_10>
</P2_0>
<P3_0>
<_03_01>we</_03_01>
<_03_02>wewe</_03_02>
<_03_03>rrrrr</_03_03>
</P3_0>
</Parameterdaten>

Nun ist es mein Wunsch, die Daten nicht in ein vorgefertigtes XML-File hineinzuschreiben, sondern das XML-File live zu erstellen. Ich habe also alle meine Textboxen die in die Kategorie <P1_0> kommen, das Tag = P1_0 gesetzt. Der Name der Textbox dann als Beispiel _01_01 genannt. Somit ist eine Zuordnung möglich. Das habe ich mit XPATH in DOM realisiert.

Dann habe ich im Buch weitergelesen, da war dann die Rede von XML mit LINQ. Habe mir das angeschaut und ausprobiert. Ds erstellen eines File ist wirklich einfacher. Aber wenn ich das auch dynamisch machen will, wie mach ich dann das? Ich habe das Problem, das ich nicht weiß wie ich die Daten und die neuen Knoten der Textboxen in das File rein bekomme. Kann mir da jemand helfen?

Das ist mal mein Anfang:




            XDocument xdoc = new XDocument (new XDeclaration("1.0","utf-8","yes"), new XComment("Artikeldatenbank"),
                new XElement("Parameterliste",
            new XElement("Parameterblock1",
                         new XElement(P01_01.Name, P01_01.Text),
                         new XElement(P01_02.Name, P01_02.Text),
                         new XElement(P01_03.Name, P01_03.Text),
                         new XElement(P01_04.Name, P01_04.Text),
                         new XElement(P01_05.Name, P01_05.Text)
                         )
                         )

                );


13.04.2010 - 06:52 Uhr

Ich könnte evtl. über einen Indexer zugreifen. Somit bin ich wieder total flexibel. Kannst du mir mal einen Tipp geben wie man überhaupt den Member so per einlesen von dem Textfile in der Klasse erstellen kann? Da gibts was mit den anonymen Typen ??

Also, mal vorneweg, es gibt ja viele Möglichkeiten das zu realisieren. Ich könnte auch einfac Arrays verwenden. Soviel mal dazu.

12.04.2010 - 22:30 Uhr

Ich lese das Datenfile Zeilenweise ein (also das gesamte File). Dann bekomme ich über den ersten Eintrag in der Zeile die Nummer der Menudatei. Dann öffne ich diese, lese die Zeilenweise ein und erstelle damit die Klasse in der ich dann für jede Zeile den Schrifttext als Member der Klasse setzen würde. Danach weise ich noch den Wert dem Member zu.

12.04.2010 - 21:18 Uhr

Also erst mal eins vorweg: Daten einlesen ist nicht das Problem, die Dictionary bestimmt auch nicht. Aber wenn eich eine automat. Klasse erstellen lassen möchte. D.h. keine Instanz, sondern eine KLasse.

Mal ein kleiner Auszug aus der Menudatei:

Seelendurchmesser vorn ......,6
Seelenneigungswinkel ........,7
Messpunkt Seelendurchmesser .,25
Verlängerung ................,8

Da stehen noch mehrere Zeilen drin, sonst würde ich die Klasse manuell erstellen.

Nun möchte ich das File zeilenweise einlesen, den Namen als Member der Klasse anlegen, und dan den Wert zuweisen.

Angenommen ich habe eine string-Variable strTmp. Ich weise ihr den Text zu:
strTmp = "SeelendurchmesserVorn";

Nun muß ich in der Klasse den Member angeben, mit dem Namen der in strTmp enthalten ist.
Wie mach ich das?

12.04.2010 - 20:17 Uhr

verwendetes Datenbanksystem: <SQL 2008 Express>

Hallo, ich habe mehrere Files die in einem alten Basic-Programm als Menudateien verwendet werden (Programm wird immer noch verwendet). Diese Textfiles beinhalten in jeder Zeile einen Text und einen Wert. So hat jedes File ca 25 zeilen, das heißt ich habe 25 Felder, mit der ANgabe von 25 Werten. Von diesen gesagten Menudateien gibt es 20 Stück. Ab und an kommt auch noch ein neuer Eintrag in den Mnudateien dazu.
Mit der Struktur dieser Menufiles werden ganze Datensätze als Textfile abgelegt (mehrere 1000 stück). Nun zu meiner Aufgabe. Ich soll immer zwei Textfiles miteinander vergleichen können. Dazu würde ich gerne die Menufiles in structs oder klassen ablegen. Es wäre echt toll, wenn ich jedes Menufile automatisch öffnen könnte (einlesen), und dann automatisch eine Klasse oder ein struct bauen lassen könnte, das mir von jeder Zeile den Textbezeichner einliest, sowie dem Feld dann den Wert zuweist. Ist so etwas in C# möglich? Das wäre echt toll, so könnte man ja dynamische Klassen bauen.

07.04.2010 - 12:03 Uhr

Hallo,

ich habe ein Problem mit dem ClickOnce in meiner Applikation. Die Applikation wird an mehren Standorten weltweit benutzt. Jetzt gibts in unserer Firma neue Server, und meine Applikation "zieht auch um" auf den neuen Server. Nun habe ich schon versucht die Applikation auch umzubiegen, auf das neue Verzeichnis des neuen Servers. Das klappt aber nicht so. Nun, ich kann ja bestimmt nicht sofort den neuen Installationsordner auf dem neuen Server angeben, sondern muß bestimmt eine neue Version zuerst noch auf dem alten Server plazieren, aber unter Updates sagen, das er schon auf dem neuen Server nachschauen soll ob da eine neue Version liegt.
Danach kann ich dann wieder eine neue Version auf den neuen Server installieren, somit wäre der umzug auf den neuen Server abgeschlossen. Somit muß keiner die Applikation komplett neu und vor allem manuell vom neuen Server installieren.
Gibt es da noch eine elegantere Version? Gibts so eine automatische Updatefunktion auch bei normalen Setup-Versionen?

04.04.2010 - 21:12 Uhr

Hallo, habe vorhin nochmal probiert, die Zuweisung mit der Abfrage über die Bindingsource geht nun. Das Problem lag wohl daran, die DataTable tbl dem .Value-Member nochmal zuzuweisen.


namespace ReportTest
{
    public partial class Form1 : Form
    {
        ReportDataSource rds1 = new ReportDataSource("NordwindDS_Kunden");
        private DataRowView drv;
        private DataTable tbl;
   
        private ReportViewer reportViewer;

   
        private ReportViewer myReportViewer;
        private ReportDataSource myReportDataSource;

        public Form1()
        {
            InitializeComponent();

            // TODO: Diese Codezeile lädt Daten in die Tabelle "NordwindDataSet.Kunden". Sie können sie bei Bedarf verschieben oder entfernen.
            this.KundenTableAdapter.Fill(this.NordwindDataSet.Kunden);

            KundenBindingSource.DataSource = NordwindDataSet.Kunden;


            myReportViewer = new ReportViewer();
            myReportDataSource = new ReportDataSource("NordwindDataSet_Kunden");

            myReportDataSource.Value = tbl;
            myReportViewer.LocalReport.DataSources.Add(myReportDataSource);
            myReportViewer.LocalReport.ReportEmbeddedResource = "ReportTest.Kunden.rdlc";


            myReportViewer.Location = new Point(200, 200);
            myReportViewer.Size = new Size(500, 400);
            myReportViewer.BackColor = Color.Red;

            Controls.Add(myReportViewer);
            myReportViewer.Visible = true;

//            myReportViewer.RefreshReport();

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void btn_SucheNamen_Click(object sender, EventArgs e)
        {
            KundenBindingSource.Filter = "Firma = '" + listBox1.Text + "'";
            if(KundenBindingSource.Count < 1)
            {
                MessageBox.Show("Es wurde kein Datensetz gefunden!"); 
                KundenBindingSource.RemoveFilter();
                return;
            }

            if(tbl != null)
                tbl.Clear();
            tbl = ((DataRowView)KundenBindingSource.Current).DataView.ToTable();

            myReportDataSource.Value = tbl;
            myReportViewer.RefreshReport();
            KundenBindingSource.RemoveFilter();
        }
    }
}

Nun aber noch etwas. Wie mache ich das, wenn sich die Bezeichnung, also der Label des ausgegebenen Datenfeldes ändern soll? Angenommen ich hätte Gemüse und Obst in einer Datentabelle. Das erste Feld gibt den Artikel an. Das könnte Äpfel, Birnen, Kopfsalat oder Rettich sein. Nun soll aber im Bezeichnenden Textfeld entweder Obstsorte oder Gemüsesorte stehen. Muß man das mit diesem VisualBasic unter dem Menüeintrag Bericht erstellen?

04.04.2010 - 11:20 Uhr

ICh weiß warum ich erst bei der Initialisierung schief läuft.

Es muß der Projektname vor die Report-Bezeichnung.


 myReportViewer.LocalReport.ReportEmbeddedResource = "MeineApplikation.Kunden.rdlc";

04.04.2010 - 09:28 Uhr

Hallo, ich verwende nicht Crystal Reports sondern den normalen Bericht (reporting Service).
Ich hbae gestern abend nochmal rumgetrickst, kriegs nicht gebacken. Habe deine VErsion aber gerade eben erst gesehen. Ich wollte die Auswahl über eine BindingSource filtern, dann die Datensätze in eine DataTable einfügen, die DataTable dann dem Report zuführen, siehe ähnlich dem Beispiel:


 this.KundenTableAdapter.Fill(this.NordwindDataSet.Kunden);

            KundenBindingSource.DataSource = NordwindDataSet.Kunden;
            KundenBindingSource.MoveFirst();
            tbl = ((DataRowView) KundenBindingSource.[2]).DataView.ToTable();
            //tbl = NordwindDataSet.Tables["Kunden"]

            myReportViewer = new ReportViewer();
            myReportDataSource = new ReportDataSource("NordwindDataSet_Kunden");

            myReportDataSource.Value = tbl;
            myReportViewer.LocalReport.DataSources.Add(myReportDataSource);
            myReportViewer.LocalReport.ReportEmbeddedResource = "Kunden.rdlc";


In einer Bindingsource lasse ich dann den Datensatz suchen, und übergebe den an die DataTable tbl.
Geht nicht, deshalb habe ich erst mal probiert einen Datensatz zuerst mal beim initialisieren in die tbl zu bekommen. Geht aber nicht, ich bekomme keine Daten angezeigt. Ic teste gleich nochmal.

03.04.2010 - 19:51 Uhr

verwendetes Datenbanksystem: <SQL 2005>

Hallo, beschäftige mich gerade mit den Reports, da ich eine Applikation habe mit der Werkzeuge gesucht und ausgedruckt werden können. Nun ist es bisher so, das ich ein Druckformular zeichne und die Werte dort reinschreibe uns Ausdrucke. Nun möchte ich das mit den Reports testen, da ich evtl. Überarbeitungen vornehmen muß. Nun habe ic das Problem, das ich beim Report immer alle Datensätze angezeigt bekomme. Ich benutze eine Bindingsource um die nach dem Artikel zu filtern. Wie schaffe ich es nun den Artikel, und zwar nur den einen an den Report zu übergeben? Ich hab edas schon mit einer DataTable getestet, funktioniert aber nicht. Ich bekomme gar nicht angezeigt. Hat jemand eine Idee?

29.03.2010 - 12:40 Uhr

Hallo, ich habe in eina Applikation mit ClickOnce veröffentlicht. Die Applikation hat weltweit Nutzer. Nun gabs auch schon mehrere Updates, was mit ClickOnce super funktioniert. Jetzt hab ich eine neue VErsion erstellt und wollte veröffentlichen. Ging nicht da mein Zertifikat abgelaufen war. Hatte dann ein neues erzeugt, wieder veröffentlicht, was funktionierte. Darauf hin habe ich meine installierte Applikation gestartet, konnte aber das Update nicht durchführen. Kann das an dem neuen ZErtifikat leigen? Was mach ich da nun, das ich nicht in die ganze Welt Mails schreiben muß zur Neuinstallation?

18.03.2010 - 12:01 Uhr

Hi, das eine Problem hat sich ja erledigt. Nun habe ich sämtliche Einstellungen wegen der Permissons getestet. Tja, ich muß überall mein Account einstellen, wennich LocalService, NetworkService oder User einstelle. Ändert sich aber mein Passwort, dan läft der Dienst nicht mehr. Wie umgehe ich dieses Problem? Ich möchte diesen Windows-Dienst auf einen entfernten Server installieren. Da möchte ich dann auch nicht mein Accaount bei disem Windowsdienst angeben. Wer kann mir helfen?

17.03.2010 - 15:03 Uhr

Hallo,
habe nun das Laufwerk mit dem Servernamen angegeben \Server\Ordner\

und habe meinen Account angegeben. Es funktioniert nun. Werde morgen mal noch andere Accounts testen.

Danke Euch.

17.03.2010 - 14:27 Uhr

Ok, dann ist doch die einfachste Lösung wenn ich beim Account erst mal mich selbst mit meeinem Account eintrage, oder? Dann müßte das doch funktionieren, oder? Muß ich dann aber die Pfadangaben der Ordner ändern? D.H. ich sehe das Laufwerk im Explorer als "G:&quot;, es liegt aber auf dem Server \Sonne.mond.de\DurchsuchenderOrdner\

Muß ich dann den Pfad mit der Serverangabe angeben?

17.03.2010 - 13:59 Uhr

Hallo frisch,

ich habe nachgesehen, unter welcher Berechtigung der Diesnt läuft. Er läuft unter:

NT AUTHORITY\NetworkService

Wie soll ich den nun einstellen? Auf meinen Account? Dann mein Passwort eingeben und den Diesnt neu starten. Wie stelle ich den

this.serviceProcessInstaller1.Account

ein ?

17.03.2010 - 13:07 Uhr

Hallo, ich habe vor kurzem eine WinForm realisiert, die ein Verzeichnis auf Dateien mit einem bestimmten Format und einem gewissen Alter erkennt, und diese verschiebt. Nun habe ich davon einen WIndows-DIesnt erstellt, was erst mal kein Problem war. Der Diesnt funktionierte erst nicht, was aber an meinem verwendeten Timer lag, da man für Windows+ und Serverdienste einen anderen Timer verwenden muß (hat mich schon mal fast einen Tag gekostet). Dann habe ich gedacht, endlich, es funktioniert. Es hat auch alles funktioniert, so lange ich auf den Laufwerken von meinem Rechner gesucht und gefiltert habe. Dann habe ich die Pfade umgestellt, inm denen die eigentlichen Daten der Produktion liegen. Und siehe da, wenn ich mit dem


            try
            {
                /// Arraygröße über Anzahl der Files festlegen, danach die Files in das Array schreiben
                _arVorhandeneDateien = new string[Directory.GetFiles(_ueberwachtesVerzeichnis, _dateiTypen).Length];
                _arVorhandeneDateien = Directory.GetFiles(_ueberwachtesVerzeichnis, _dateiTypen);
            }
            catch (Exception ioec)
            {
                // MessageBox.Show("Haben sie die nötigen Rechte auf den zu überwachenden Ordner?", ioec.Message);
                ProtokollEintragSchreiben("[" + DateTime.Now + "] ==> <<<<<<<<<<<<<<<<<< " + ioec.Message + " ----- >>>>>>>>>>>>>>>>>> [Fehler, beim Zugriff auf das Überwachungsverzeichnis]");
                //return;
            }

Wenn ich den Diesnt installiert habe und Debugge, springt er in den Try Block, und dann sofort in die catch{} MEthode. Mir scheint es jetzt so, als hätte der DIesnt keinen Zugriff auf den Ordner im Netz. Habe nun auch schon sämtliche EInstellungen

in




   // serviceProcessInstaller1
            // 
            this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.NetworkService;
            this.serviceProcessInstaller1.Password = null;
            this.serviceProcessInstaller1.Username = null;
            // 

versucht. Bringt aber nichts. Ich selber mit meinem Account kann mit dem Explorer in da VErzeichnis gehen und dort arbeiten. Der Diesnt nicht. Wie stelle ich das ein? Kann mir da jemand helfen?

Ach ja, wenn ich bei Account USER einstelle, installiere den Diesnt mit
installutil Applikationxxx

dann werde ich nach dem Usernamen und Passwort gefragt. Ich gebe das ei´n von meinem Konto am Rechner, die Installtion wird aber nicht durchgeführt. ??? Warum?

19.02.2010 - 09:10 Uhr

Hallo oehrle,

Lass all Table-Adaber von eiem gemeinsamen Interface oder so erben, dann kannst du eine Methode schreiben die das Interface verwendet oder generisch ist:

Gruß
Juy Juka

Das geht doch gar nicht, weil ich ein typ. Dataset verwende.

19.02.2010 - 07:09 Uhr

SQL 2005 Express

Hallo, es generell möglich einen Typ als Argument in einer MEthode zu übergeben? Ich habe das Problem mit einer Access DB. da habe ich sehr viele Tabellen. Ich mache eine Abfrage über Winkelangaben, dadurch soll dann die entsprechende Tabelle in den TableAdapter eingelesen werden. Nun habe ich natürlich 20 Winkelbereiche. Das bedeutet, ich muß in den IF-Bedingungegn jedes mal den ganzen Code wiederholt schreiben, nur der TableAdapter ist anders, weil er vom typ. Dataset erstellt ist. Deshalb wäre es elegant, wenn man eine MEthode hat, der man nur den Tableadapter übergibt. Gibt es da eine Möglichkeit?

Hier ein Beispiel:


if (dateneingabe.Drallwinkel > 0 && dateneingabe.Drallwinkel <= 30)
							 {
						         Rollom30TableAdapter rollom30TableAdapter = new Rollom30TableAdapter();
								 tableAdapterManager.Rollom30TableAdapter = rollom30TableAdapter;
								 rollom30TableAdapter.ClearBeforeFill = true;
								 rollom30TableAdapter.Fill(this.zeit_KalkulationDataSet.Rollom30);

								 machinenBindingSource = new BindingSource(zeit_KalkulationDataSet,
																						zeit_KalkulationDataSet.Rollom30.ToString());
							 }
                             if (dateneingabe.Drallwinkel > 30 && dateneingabe.Drallwinkel <= 45)
							 {
							 	Rollom45TableAdapter rollom45TableAdapter = new Rollom45TableAdapter();
							 	tableAdapterManager.Rollom45TableAdapter = rollom45TableAdapter;
							 	rollom45TableAdapter.ClearBeforeFill = true;
							 	rollom45TableAdapter.Fill(this.zeit_KalkulationDataSet.Rollom45);

							 	machinenBindingSource = new BindingSource(zeit_KalkulationDataSet,
							 	                                                       zeit_KalkulationDataSet.Rollom45.ToString());
							 	
							 }

Also ich würde mir das so in dieser Richtung als Methode vorstellen:


public void DatenSatzFinden(TableAdapter tbl, double durchmesser, string tabellenname)
						    {
						        tbl tbl_instanz = new tbl();
                                tbl_instanz.ClearBeforeFill = true;
                                tbl_instanz.Fill(this.zeit_KalkulationDataSet, tabellenname);
                                ..
                                    // HIer könnte ich dann noch gleich die Bindingsource einbringen
                                    // und die Daten filtern, als Row ausgeben

						    }

Gibt es eine Möglichkeit dafür? Solche Probleme gibt es ja bestimmt öfters??

22.01.2010 - 09:09 Uhr

Hallo, versuche mich wieder an dieser Aufgabe. Habe das nun schon mit einem untypisierten und typisierten Dataset versucht.
Das typisierte bringt in der hinsicht schon viele Vorteile mit den Databindings und den sprechenden Bezeichnern. Aber das speichern, wenn man mehr als zwei Tabellen hat die miteinander in Beziehung stehen hab ich nch nicht hingekriegt. Enweder fehlt in einer Tabelle der Eintrag komplett, oder ich bekomme eine Fehlermeldung, das der Primärschlüssel fehlt obwohl in der TExtbox ein WErt eingefügt ist (und auch unique ist).

Hier mal der Code, der ist ja erst mal trivial. Ich hätte erst mal noch ein Bild mit der Oberfläche hochgeladen, aber da brauch ich ja nen Server, geht das auch anders direkt vom PC?


{
		public Form2()
		{
			InitializeComponent();
		}

		private void firmaBindingNavigatorSaveItem_Click(object sender, EventArgs e)
		{
			this.Validate();

			this.firmaBindingSource.EndEdit();
			bestellungenBindingSource.EndEdit();
			lieferterminBindingSource.EndEdit();

			firmaTableAdapter.Update(kundendatenDataSet.Firma);
			bestellungenTableAdapter.Update(kundendatenDataSet.Bestellungen);
			lieferterminTableAdapter.Update(kundendatenDataSet.Liefertermin);

		//	this.tableAdapterManager.UpdateAll(this.kundendatenDataSet);

		}

		private void Form2_Load(object sender, EventArgs e)
		{
			// TODO: Diese Codezeile lädt Daten in die Tabelle "kundendatenDataSet.Liefertermin". Sie können sie bei Bedarf verschieben oder entfernen.
			this.lieferterminTableAdapter.Fill(this.kundendatenDataSet.Liefertermin);
			// TODO: Diese Codezeile lädt Daten in die Tabelle "kundendatenDataSet.Bestellungen". Sie können sie bei Bedarf verschieben oder entfernen.
			this.bestellungenTableAdapter.Fill(this.kundendatenDataSet.Bestellungen);
			// TODO: Diese Codezeile lädt Daten in die Tabelle "kundendatenDataSet.Firma". Sie können sie bei Bedarf verschieben oder entfernen.
			this.firmaTableAdapter.Fill(this.kundendatenDataSet.Firma);

		}

		private void bnd_Firma_AddNewItem_Click(object sender, EventArgs e)
		{
			LöscheTextboxen(pnl_Firma);
			LöscheTextboxen(pnl_Bestellungen);
			LöscheTextboxen(pnl_Liefertermin);
		}
	}

15.01.2010 - 08:30 Uhr

Habe es nun erst mal händisch probiert. Das funktioniert nicht, klingt auch wirklich logisch da man das System sonst wirklich ganz einfach aushebeln könnte.

14.01.2010 - 08:54 Uhr

Hallo, wir hatten die Diskussion schon mal mit den CHM-Files, die über das Netzlaufwerk nicht mehr funktionieren. Dazu kan man dann ja einen Registryeintrag vornehmen (Microsoft zeigt das in einem Beispiel) und somit das betreffende Verzeichnis freigeben.
Nun, das habe ich gemacht, funktioniert auch wunderprächtig. Nun aber muß auf den Clients die Registry angepaßt werden, damit das File geöffnet werden kann. Wenn manche Clientuser baer keine Admin-Rechte haben, dann können die die Registry nicht ändern (oder das RegFile nicht übernehmen). Nun zur eigentlichen Frage:
Der Eintrag mit "UrlAllowedZone" liegt in dem Zweig "LOCALMACHINE".
Somit gilt der für alle User. Ist es aber auch möglich den Schlüssel unter "CURRENTUSER" anzulegen? Funktioniert das? Somit könnte ich mir vorstellen, dass dann jeder User für seinen Account das Reg-File einlesen könnte, oder die Änderung manuell vornehmen kann? Kann mir das einer sagen?

03.01.2010 - 10:00 Uhr

verwendetes Datenbanksystem: <sql2005>

Hallo, folgende Frage. Ich habe 4 Tabellen mit Kundendaten. Tabelle 1 hat Kundendaten, Tabelle 2 hat Zeichnungsdaten von Kunden, beide haben eine Fremschlüselbeziehung. Tabelle 2 hat wiederum eine Bezeihung mit Tabelle 3, Tabelle 3 mit Tabelle 4.

Ich möchte eine Oberfläche machen, in der die Daten eingegeben werden können und angesehen gewerden können. Je de Tabelle bekommt einen Bindingnavigator. Habe mich auch schon daran versucht. Nun die Frage: Arbeite ich mit einem untyp.Dataset, lass ich dann de Bezeihungen untereinader besser weg, damit man beim Daten updaten nicht noch alle Constraints beachten muß? Also dann mit DataView arbeiten? Oder wie macht das der Fachmann?

08.12.2009 - 14:41 Uhr

Hallo herbivore, nun ich bin eigentlich ein zurückhalteneder Mensch. Aber auf deine Kommentare kann man ganz gut verzichten, denke an das Beispiel von Screenshoot unterbinden. Ich bin da nun auch ganz gut zu einer sicheren Lösung gekommen. Aber nicht mit deinen genialen Einwürfen. Hoffentlich bist du im wahren Leben nicht auch so ausgebrannt.

08.12.2009 - 12:39 Uhr

Also, ich will das ch-File nicht direkt auf die lokale Platte kopieren, da im chm-File KnowHow steckt. Das dann ganz einfach zu kopieren und wegzutragen ist zu leicht um es zu klauen. Deshalb zentral auf Netzlaufwerk, Print-Funktion deaktiviert, Screenshoots nicht möglich das die Programme gesperrt sind, und die User können keine anderen Programme installieren da sie keine Adminrechte haben. Nun, gibt es keine Einstellung mit den Rechnern auf das File zuzgreifen und anzeigen zu lassen ohne das man an der Registry rumfummelt ? Das ist nämlich das Problem, das die wöchentlich die Registry sauber putzen, also wäre das eine schlechte Lösung. Oder kann man die chm verschlüsselt ablegen?

07.12.2009 - 08:40 Uhr

Ja, das wußte ich auch schon. Also ist dir keine andere Lösung bekannt? Außer Registry ändern und UNC-Pfad im Internetexplorer anzugeben?

07.12.2009 - 08:11 Uhr

Hi und Danke für den Tipp. Habe mir das mal durchgelesen. Es scheint mir aber das man generell einen Registry-Eintrag vornehmen muß. Das möchte ich lieber umgehen, da man Konzenweit dann die betreffenden Rechner erfassen müßte. ICh brauche das ja auch nur für ein File, das auf einem NEtzlaufwerk liegt, wo das entsprechen VErzeichnis für betreffenden User freigegeben ist. Wichtig für mich: Das File sollen die User nicht lokal auf ihre Platte speichern. Gibts da eine elegante Lösung dafür?

04.12.2009 - 09:50 Uhr

Hallo, habe im Forum unter Link:

[FAQ] Erstellung von Hilfe-Dateien (z.B. CHM) mit Hilfe von Tools

schon etwas zu meinem Problem gefunden.

Das .chm-File liegt auf einem Netzlaufwerk. Das kann von meinem Entwicklungsrechner geöffenet werden, aber nicht von den anderen Rechnern. Es werden die Indexe angezigt, aber nicht der betreffende Inhalt dazu. Habe nun auch schon den Reiter "Zulassen" beider chm-Datei im NEtzlaufwerk betätigt (wei in dem link beschrieben), aber leider kannich das File immer noch nicht von anderen Rechnern öffnen. Ich habe nicht die Möglichkeit auf allen anderen Rechnern einen Registry-Eintrag durchzuführen. Gibt es da keine andere Möglichkeit? Ist es eigentlich gewährleistet, das über den Button "zulassen" das chm-File aus dem NEtz dann von allen Rechnern geöffnet werden können darf? Ich habe noch etwas gesehen, mit einer Einstelling im IE unter Sicherheit, Sites,, das man da noch was drehen kann. Gleich noch was vorneweg: Ich weiß das ich das chm-File auch auf die anderen Rechner kopieren könnte, das wollen wir aber nicht.

Hat jemand eine Idee?

03.12.2009 - 14:28 Uhr

Hat funktioniert, danke.

03.12.2009 - 13:34 Uhr

Hallo , versuche gerade die Labels aus einem Panel über eine foreach-Schleife neu anzuordnen. Geht aber nicht, da ich dem control (ctrl.Locatin.X = Wert) keinen WErt zuweisen kann. Hat jemand eine Idee warum?

Hier noch der Quellcode:


for (int i = 0; i < panel_Eingabedaten.Controls.Count; i++ )

				foreach (Control ctrl in panel_Eingabedaten.Controls)
				{
				   if((ctrl is Label) && (ctrl.Visible))
				   {
				   	 if(ctrl.Tag.ToString() == i.ToString())
				   	 {
				   	 	//Label label = (Label) lbl;
				   	 	ctrl.Location.X = 10;				// Geht nicht (Cannot modify the expression because its not a variable  ==> so lautet die Meldung vom Compiler)
				   	 	ctrl.Location.Y = 20;
				   	 }


				   }
				}
23.11.2009 - 15:27 Uhr

Hallo,

ich setzte in C# eine MEldung ab, sobald in der Oberfläche ein Artikel ausgedruckt wird. Diese Meldung beinhaltet den Artikel, die Uhrzeit und das Datum, wann gedruckt wurde. Ich setzte diese Meldung in C# über eine SQLTransaction ab. Nun hat meine Anwendung auch ein User in China. Jetzt habe ich bemerkt das sein Eintrag in die Datenbank gar nicht immer stattfindet und irgenwo ins leere läuft. Ich arbeite aus diesem Grund auch nicht bei den Meldungen mit einem DataSet, damit die Meldung "Live" in meine Kontrolltabelle eingetragen wird.

Nun meine grundsaätzlichen Fragen: Wenn ich eine SQLTransaction ausführe, kann ich sicher sein das die auch ankommen muß, auch wenn diese durch eine Firewall gesperrt werden würde? Wäre das so (was ich nicht genau weiß), dann könnt eich das Programm abbrechen, der User wäre gezwungen die Firewall zu öffnen um den Meldungseintrag zu ermöglichen.
Habe ich eine relativ einfache Möglichkeit zu prüfen, ob der Meldeeintrag durchgegangen ist? Kann das sein, das das Timeout der Verbindung erhöht weren muß?

Ich habe den Meldeeintrag nachfolgend beigefügt:


string strSQL = "INSERT INTO Kontrolltabelle (ID, USERNAME, MACHINENAME, LEVEL, DATE, TIME, PU, HARDCOPY) VALUES ("
				+ "'" + id + "'" + ", '" + userName + "', '" + machineName + "', '" + level + "', '" + date + " ', '" + time + "', '" + pu + "', '" + "PRINT" + "')";


			SqlTransaction trans;
			SqlConnection conn = new SqlConnection(verbindung);


			try
			{
				conn.Open();
				trans = conn.BeginTransaction();
				try
				{
					SqlCommand cmd = new SqlCommand(strSQL, conn);
					cmd.Transaction = trans;
					cmd.CommandText = strSQL;
					cmd.ExecuteNonQuery();
					trans.Commit();
				}
				catch (Exception e)
				{
					trans.Rollback();
					MessageBox.Show(e.Message, "Error  -->  Try again");
				}

			}
			catch (Exception ex)
			{
				MessageBox.Show(ex.Message, "Error");
			}
			conn.Close();

23.11.2009 - 12:39 Uhr

Hallo, folgendes Problem. Ich habe mehrere Textboxen mit Labels in die Daten eingegeben werden können. Je nach Auswahlkriterium sind aber nur manche von denen sichtbar. Nun möchte ich aber diese Controls immer direkt untereinander stehen haben, auch wenn manche ausgeblendet sind, damit kein leerer Bereich vorhanden ist. Wie mache ich das am besten? Ich denke die Controls in ein Panel packen, das wäre schon mal der erste Schritt. Wie organisiere ich dann das automatische anpassen im Panel?

02.11.2009 - 12:32 Uhr

Danke Svenson. Gefühlte SIcherheit ist genau der richtige Ausdruck, das etwas unternommen wurde und dem normalen User nicht die Daten in die Arme fallen.
Wie fülle ich das Clipboard zyklisch mit Müll, oder führe dieses Hooking durch?

29.10.2009 - 20:27 Uhr

Das war leider keine Antwort auf meine Frage. Wenn sich der gute Mann 300 Zahlen pro DAtensatz merken kann, ist der Mann gut. Wenn er dann noch abzuschreiben beginnt, und seine Kollegen sehen ihn dabei, weil das Programm nur an einem bestimmten Rechner läuft, dann ists auch sehr auffällig. Außerdem ist mir auch klar, das es keinen 100% SChutz gibt, sonst kommt der Junge vorbei und klaut den Server 😉

Also, gibt es nun was C-sharpiges dafür?

P.S. 😄ie Idee von deinem Benutzerdefiniertem Steuerelement (Textbox) war auch sehr gut.

29.10.2009 - 19:53 Uhr

Ja, die Gedanken habe ich mir auch schon gemacht. Aber jetzt mal Spaß beiseite. Ist jemandem von Euch so etwas bekannt? Anderes Beispiel: Ein Autor erstellt ein Buch über C#. Er verkauft es. Es gibt das E-Book als PDF dazu. Man kann den Beispielcode nicht direkt markieren und also "Paste and Copy" verwenden. Man kann es auch nicht ausdrucken da es verschlüsselt ist.

Nun nochmal zu meinen Daten. Ich zeige über ein Formular Daten zur Nachbearbeitung von Werkzeugen an. Nun habe ich schon sämtliche Vorkehrungen getroffen, dan nur registrierte Arbeitsstationen und User das Programm starten können. Nun wär die Verhinderung von Screenshoots das iTüpelchen. Außerdem stehen die Monitore in speziellen Vitrinen (wegen Kamera). Gibt es da nun eine LÖsung das in C# zu realisieren? Kann man nicht irgendwie zur Laufzeit die Prozesskennung vom Programm überprüfen und schauen ob das irgendwie in der Druckerschlange steht?

Gruß oehrle

29.10.2009 - 15:28 Uhr

Wenn ich Daten anzeige, die keiner unkontrolliert zu Papier bringen darf. Deshalb sollte in dieser Applikation das nicht möglich sein.

29.10.2009 - 14:46 Uhr

Hallo, gibt es irgendeine programmatische Möglichkeit, einen Screenshoot von einer Oberfläche zu unterbinden? D.H. nicht nur die Tastenkombination zu sperren, denn es könnte ja sein das bei einem anderen Tool die Tasten anders belegt sind. Wird für so etwas eine besondere allgemeingültige Methode aufgerufen, die gepserrt werden könnte?

21.10.2009 - 08:44 Uhr

Hallo,

ich habe vor kurzem irgendwo etwas gesehen, das man in eine Quellcodedatei einen Link auf eine Word-Datei machen kann, zu Dokuzwecken. LEider finde ich das nicht mehr. Kann mir einer sagen wie das geht?


using System.Resources;
using System.Drawing;

//	   G:\ReCon\CSharp\ SQL.doc     // Link zur Datei // <== hier

namespace Nachschleifen_SQL
{
    public partial class Form_Typauswahl : Form
    {
       private string Levelkennung = string.Empty;

15.10.2009 - 07:26 Uhr

Hallo,

wie mache ich das wenn ich mit einer Methode meine ganzen Stifte anlegen will? Habe folgendes probiert:


 public partial class Form1 : Form
    {
         private Graphics graph;
         private GraphicsPath grPath;
      
       // Stifte festlegen
        private Pen Kontur;
        private Pen Rohkörper;


        public Form1()
.
.
.

private void btn_Linie_Click(object sender, EventArgs e)
        {
            // Stift erzeugen, geht aber so nicht
            StiftErzeugen(Kontur, 1, Color.Red);

            graph.TranslateTransform(20.0F, pnl_Grafik.Height / 2.0F);

            grPath.AddLine(0, 0, pnl_Grafik.Height, pnl_Grafik.Width);

            graph.ResetTransform();
        }

 private void StiftErzeugen (Pen pen, int strichstärke, Color farbe)
        {
            pen = new Pen(farbe, strichstärke);
        }

Wie kann ich das in einer Methode machen? Das hängt doch mit dem 1. Argument in der MEthode zusammen. Wie kann ich trotzdem die Klassendaklaration "Kontur" übergeben und die Instanz erzeugen lassen?

15.10.2009 - 07:19 Uhr

Funktioniert, hatte die Matrix nicht zugewiesen, Danke.

12.10.2009 - 23:52 Uhr

Muß wohl irgend eine Excel-Macke sein, mit der Kopie. Da fehlen einfach ein paar Datenreihen. Der Namen vom Blatt endet mit einem $-Zeichen.

12.10.2009 - 14:15 Uhr

Hallo,

ich öffne ein Excelfile mit OleDB und lege die daten in ein dataSet ab. Später verwende ich das dataSet mit der abgelegten Exceltabelle um Daten überprüfen zu können. Mein Excelfile hat 371 Zeilen, im dataset werden mir aber nur 357 Daetnsätze angezeigt. Hab schon einiges geprüft, doch den Hintergrund dafür habe ich noch nicht gefunden. Hat jeman eine Idee? Leerzeilen habe ich alle in Excel gelöscht, dachte erst es liegt daran.


  /// <summary>
        /// Holt die Daten aus einer Excel-Datei in ein DataSet
        /// </summary>
        /// <param name="excelFile">Pfad zur Excel-Datei</param>
        /// <param name="headers">Haben die Tabellenspalten Überschriften</param>
        /// <returns>DataSet</returns>
        private DataSet GetExcelDataSet(string excelFile, bool headers)
        {
            string tableName = null;
            DataSet ds = new DataSet();

            OleDbConnection con = new OleDbConnection();
            con.ConnectionString = "Data Source=" + excelFile +
                ";Provider=Microsoft.Jet.OLEDB.4.0;";

            if (headers)
                con.ConnectionString += @"Extended Properties=""Excel 8.0;HDR=Yes""";
            else
                con.ConnectionString += @"Extended Properties=""Excel 8.0;HDR=No""";

            con.Open();
            DataTable_Word sheets = con.GetOleDbSchemaTable(
                OleDbSchemaGuid.Tables,
                new object[] {null, null, null, "TABLE" });

            foreach (DataRow sheet in sheets.Rows)
            {
                tableName = sheet["Table_Name"].ToString();
                string sql = "SELECT * FROM [" + tableName + "]" + "ORDER BY F0";
                //OleDbDataAdapter adap = new OleDbDataAdapter(sql, con);  // wird global angelegt, wegen update in >> btn_DatenPrüfen_Click() <<
                adap = new OleDbDataAdapter(sql, con);
                adap.Fill(ds, tableName);
            }

            bs_excel = new BindingSource(ds, tableName);
            tabellenname_Excel = tableName;

            
            con.Close();
            OpenExcelFile(excelFile);
            return ds;
        }

07.10.2009 - 14:35 Uhr

Hallo herbifore,

danke für die Hilfe. Leider klappts noch nicht, mit der Spiegelung.

Laut Doku:

Die Matrix-Klasse bietet mehrere Methoden zum Erstellen einer zusammengesetzten Transformation: Multiply, Rotate, RotateAt, Scale, Shear und Translate. Im folgenden Beispiel wird die Matrix einer zusammengesetzten Transformation erstellt, die zuerst eine Drehung um 30 Grad, dann eine Skalierung um den Faktor 2 in yRichtung und anschließend eine Verschiebung um 5 Einheiten in xRichtung ausführt:

Matrix myMatrix = new Matrix();  
myMatrix.Rotate(30);  
myMatrix.Scale(1, 2, MatrixOrder.Append);  
myMatrix.Translate(5, 0, MatrixOrder.Append);  

BEi Scale müßte (2,-1 oder 2,1) stehen, um an der X-Achse zu spiegeln.
Ich habs in einem Panel getestet, da habe ich mir zuerst ein Fadenkreuz mittig eingezeichnet un dann probiert, die Linienkontur zu spiegeln. Geht aber nicht. Ich habe hie rmal den Code, vielleicht ist da auch was verbogen??


 private void panel1_Paint(object sender, PaintEventArgs e)
        {
            Graphics graph = e.Graphics;

            pen = new Pen(Brushes.Aquamarine, Width = 2);
            graph.DrawLine(pen, 1.0F, panel1.Height / 2.0F, panel1.Width, panel1.Height / 2.0F);

            fadenkreuz_X_start = new Point(0, panel1.Height / 2);
            fadenkreuz_X_end = new Point((panel1.Location.X + panel1.Width), panel1.Height / 2);
            //  fadenkreuz_Y_start = new Point(panel1.Location.X + Randabstand , 0);
            fadenkreuz_Y_start = new Point(Randabstand, 0);
            //  fadenkreuz_Y_end = new Point(panel1.Location.X + Randabstand, panel1.Height);
            fadenkreuz_Y_end = new Point(Randabstand, panel1.Height);

            stiftstärke = 2;
            stiftfarbe = Color.Blue;
            pen = new Pen(stiftfarbe, stiftstärke);
            pen.DashStyle = DashStyle.DashDot;

            // g.PageUnit = GraphicsUnit.Pixel;
            graph.DrawLine(pen, fadenkreuz_X_start, fadenkreuz_X_end);
            graph.DrawLine(pen, fadenkreuz_Y_start, fadenkreuz_Y_end);

            // Nullpunktverschiebung
            graph.TranslateTransform(Randabstand, panel1.Height / 2.0F);
            





            GraphicsPath graphicsPath = new GraphicsPath();

            graph.DrawLine(Konturform, 0,0,10,10);

            graphicsPath.AddLine(0,0,10,10);
            graph.DrawLine(Konturform, 10, 10, 35, 10);
            graphicsPath.AddLine(10, 10, 35, 10);
            graph.DrawLine(Konturform, 35,10,80,55);
            graphicsPath.AddLine(35,10, 80, 55);
        //    graph.DrawPath(Rohkörper,graphicsPath);

           


            Matrix myMatrix = new Matrix();
           // myMatrix.Rotate(30);
            myMatrix.Scale(2,-1, MatrixOrder.Append);
            
          //  myMatrix.Translate(25,25, MatrixOrder.Append);
            graph.Transform.Translate(0,0,MatrixOrder.Append);
           graph.DrawPath(new Pen(Color.DarkTurquoise,2), graphicsPath);


        }

Wieso klappt das nicht?

05.10.2009 - 07:06 Uhr

Also,

ich zeichne Geraden entlang der X-Achse. Da habe ich einen Button, wenn der gedrückt wird einEingabefeld für die neue X-Position angezeigt. Mit dem anderen Button kann ich einen Winkel und die nächste X-Position angeben. Somit kann ich ein Rotationssymmstrisches Teil entlang der X-Achse zeichnen. Es ist dann halt nur der halbe Körper gezeichnet. Um einen kompletten Körper anzuzeigen, müßte man diese Kontur (habe diese in einem GraphicsPath abgelegt) einfach nach oben spiegeln können. Hab das mal mit Matrix probiert, bin mir nicht sicher ob das aber korrekt ist.
Geht sowas überhaupt mit Transform und Matrix?

04.10.2009 - 16:22 Uhr

Hallo,

gibt es eine Methode in GDI+ mit der man eine Kontur (mehrere Linien aneinander gereiht) entlang der X-Achse spiegeln kann? Hae mal recherchiert, aber nichts gefunden.

11.09.2009 - 13:10 Uhr

Mit dem Express Studio kenne ich mich nicht wirklich aus, aber im normalen Studio kannst du z.B. über Menü "Query -> Results to -> Results to File" (englische Version) oder CTRL+SHIFT+F einstellen, dass alle Ergebnisse in ein Textfiele umgeleitet werden.

Zusätzlich kann man auch über Menü "Query -> SQLCMD" den sqlcmd-Mode aktivieren und dann die Ausgabe über ":OUT" umleiten:

:OUT D:\Temp\Test\test.txt  
SELECT  
      SonstWas  
   from MyTable  
  

Sorry, habe das mal getestet.

😮UT C:\Test.txt
SELECT Winkel1, Kantenradius, Scheibendurchmesser, Kunde
FROM AlleDaten

Funzt bei mir nicht, bekomme Fehlermeldung. Arbeite mit der Vollversion von VStudio 2008.
Why it doesn't work ??