Laden...
S
Sclot myCSharp.de - Member
IT-Fachinformatiker richtung Anwendungsentwicklung Bremen Dabei seit 02.05.2007 324 Beiträge
Benutzerbeschreibung

Forenbeiträge von Sclot Ingesamt 324 Beiträge

26.02.2010 - 11:23 Uhr

Zitat Kollege:

08:44 MD: falls du ma langeweile hast... schau doch mal, ob wir irgendwo eine diskussion mit ergebnis finden, warum wir lieber DLL's ausliefern sollten, anstatt eine EXE

Das "Problem" ist folgendes:
Bisher haben wir unsere Software immer nur in EINER einzugen EXE ausgeliefert.
Dies hat natürlich gewisse Nachteile, wie schlechtere wiederverwendbarkeit...
Einige Kollegen sehen nun nicht ein warum man in .NET in DLL´s Programmieren sollte, wenn man es schon angeboten bekommt.

Ich persönlich find diese ganze Disskussion grenzwertig, weil ichs einfach gewohnt bin in DLL´s zu programmieren.
Meine Kollegen allerdings sind es gewohnt in einer einizigen EXE zu Programmieren, was wohl z.B. den nachteil der wiederverwendbarkeit zum vorteil des schutzes bietet, da in der EXE keine methoden public sein müssen und somit auch nicht von aussen aufgerufen werden können.

Der größte Nachteil wird wohl wegen der versionierung gesehen.
Wieder ein Zitat:

11:08 MD: z.b. hat marv die exe kompiliert
11:08 MD: und dann gedacht, die dll's werden gleich mit erstellt
11:08 MD: war aba nit so
11:08 MD: und versionsabgleich ist dann schwierig
11:08 MD: was hat der client ?
11:08 MD: was haben wir ?
11:08 MD: was hat der server ? etc
11:09 MD: gibt ne menge probleme
11:09 MD: die man erstmal berücksichtigen und programmieren müsste
11:09 MD: was wir bei der EXE eben nicht haben

Zu dem thema "dll wird nicht bei exe-kompilat mit kompiliert" denke ich ist das eine einstellungssache des VS oder von einem selbst... immerhin hat man folgende Möglichkeiten:

  • einfach die ganze Projektmappe durchkompilieren, dann werden die DLL´s auch neu erstellt
  • im VS einstellen, das beim ausführen die DLL-Mappen mit erstellt werden
  • ein Setup-Projekt anlegen und dieses vor der auslieferung erstellen, so wird uch die gesamte Projektmappe noch mal durch kompiliert
  • über einen Buildserver gehen und dem die Nuild überlassen, der macht das schon richtig 😃

Zum Thema versionierung kann ich nur sagen:
Wenn man das ganze Projekt durchkompiliert, dann hat man jeweils immer die Aktuelle DLL auf der Platte. Diese dann auch im Setup oder im Update, je nach dem.

Kann man trotz dem etwas dafür tun, das man keine Probleme mit veralteten DLL´s bekommt, die dann auf einmal, warum auch immer benutzt werden?

Ich geh jetzt mal googeln.. vielleicht find ich was schönes zum thema 😃
Ich würde euch trotzdem bitten eure Erfahrungen aufzuschreiben.
Danke!

17.02.2010 - 16:19 Uhr

Und wie war das mit der Vorschau?
Diese RDL Reports funktionierten doch nicht mit dem Report-Viewer Control Vom Visual Studio... oder bin ich grad wirr?

11.02.2010 - 22:45 Uhr

Verwendest du eine 32Bit DLL in dem Dienst?

11.02.2010 - 13:47 Uhr

Könnte unter anderem an dem benutzer liegen, für den der Dienst installiert wird.

Was steht denn bei: serviceProcessInstaller.Account = ???

Ich hatte mal Probleme mit ServiceAccount.LocalService, da es diesen unter Windows2000 nicht gibt.

04.02.2010 - 14:51 Uhr

Mhm...
Ins kalte Wasser geworfen werden und ein Modul unter realen Bedingungen zu bauen, in der Arbeitszeit - hört sich auf dem ersten Blick nicht schlecht an.

Dann muss ich wohl mal was finden, was nicht zu sehr anstrengt, erste erfolge vermittelt, halbwegs einfach umzusetzen ist und zudem noch sinnvoll ist.

Danke erstmal dafür 😃

04.02.2010 - 14:47 Uhr

Für eine Art Ticket-System benutzen wir hier ein DataGridView in dem wir die Tickets auflisten.
Die Daten kommen via Select abfrage aus einer MySQL Datenbank.

Jetzt geht es um das Thema Aktualisieren.
Das Problem ist: Wenn jmd anders jetzt ein neues Ticket einträgt, dann wird es bei mir nicht angezeigt, bevor ich die Daten nicht aktualisiere.

Wann ist es denn eurer Meinung nach Sinnvoll diese Daten zu aktualisieren?
Über einen Timer in einem bestimmten Intervall?
Immer beim Minimize/Maximize/Resize des Formulars?
Oder gibt es ein Event, den man von der Datenbank abfragen kann, das ein neuer Eintrag Hinzugefügt wurde auf dem ich dann reagieren kann und das Grid aktualisieren kann?

03.02.2010 - 20:47 Uhr

Sry, mir fiel hierfür kein besserer Titel ein.

Wir (8 Mitarbeiter in einem kleinen Softwarehaus) stehen nun immer noch vor dem umstieg von Visual Foxpro auf C#.

Das es C# wird, dafür haben wir uns nun schon entschieden.
Unseren ersten Workshop für C# haben wir auch schon bezahlt bekommen.
Allerdings arbeitet bis heute noch niemand Produktiv damit.
Manche Kollegen haben nicht mal das Visual Studio installiert.

Das Problem ist nach wie vor das die Kollegen nie ruhe und zeit haben sich damit auseinander zu setzen - und da sie schon etwas älter sind, denke ich brauchen die dafür auch mal wirklich etwas ruhe und zeit.

Nun der gedanke: wenn wir das schon nicht in der Arbeitszeit schaffen, dann müsste es doch irgendwie ausserhalb der Arbeitszeit zu schaffen sein.
Das Problem hierbei ist, das niemand gern seine Freizeit dafür opfert um irgendwas neues zu lernen (ok, bei usn ist das was anderes, aber bei alten VFP Entwicklern denen ihr Werkzeug weggenommen wurde sieht das schon anders aus).

Da ich auch nur ein Mitarbeiter bin, mir es aber irgendwie mehr am Herzen liegt von VFP weg zu kommen und endlich mal C# einzusetzen bevor eine neue Technologie den Markt überschwemmt habe ich folgende Frage:

Was kann der ARBEITGEBER denn dafür tun das wir uns hier mal nach Feierabend eine Stunde oder nen halben Tag am Wochenende hinsetzen um hier mal weiter zu kommen?
Spontan würden mir da nur bezahlte Überstunden einfallen... aber ich glaub davon hat jeder schon genug...

Ich brauch also quasi irgendeine Motivation für die Frustrierten Leute hier....

03.02.2010 - 19:18 Uhr

OK, machen wir es WinForm Spezifisch, da ich hier wirklich eien Winform Anwendung habe in der ich es brauche 😃

03.02.2010 - 19:11 Uhr

Guten Abend,

wie würdet ihr Pflichtfelder in einer GUI lösen?

Gedacht habe ich mir folgendes:
Eine Liste vom typ Objekt, wo ich alle Pflichtfelder hinzufüge.
Pflichtfelder können nun von mehreren typen sein, z.B. TextBox, MaskedTextBox, CheckBox, darum die liste vom Typ Objekt.
Irgendwann gibt es dann eine Methode pruefe_pflichtfelder() oder so, in welcher ich die liste in einer forech schleife durchgehe, mit GetType() nach schaue von welchem Typ das Objekt in der Liste ist und dementsprechend dann die spezielle Prüfung baue.
Für eine TextBox muss dann geprüft werden ob .Text leer ist.
Für eine Checkbox muss geprüft werden ob sie checked ist.
Für eine MaskedTextBox muss geprüft werden ob die Maske komplett ausgefüllt wurde.

Ja - so in etwa dachte ich mir das.
Wenn ich mir das aber durchlese, klingt das in meinen Augen irgednwie sehr frickelig 😦

Kann mal jemand was dazu sagen?

03.02.2010 - 12:31 Uhr

Das Add ist falsch 😃

ImportRow willst du 😃

Edit: ups, eben gesehen das du eien Column rein tun möchtest...
Ein ImportColumn gibts nicht.... sry.

22.01.2010 - 11:45 Uhr

Noch haben sie es ja nicht geschafft - aber wir sind dabei 😃

22.01.2010 - 11:14 Uhr

Nun ja...
Meine Kollegen benutzen hier seit 20 Jahren schon Foxpro und VSS.
Für sie ist dieses arbeiten selbstverständlich, dass einer etwas an einer Datei macht und alle anderen daraus keinen Zugriff haben.
Ebenso selbstverständlich ist es für sie, dass sie sehen können wer gerande an welcher Datei arbeitet.

Mit dem Umstieg von Foxpro auf C# könnte man auch die Chance nutzen SVN statt VSS einzusetzen - hört sich bei den meisten usern die es einsetzen sehr gesund an, ist erweiterbar, API´s gibts auch, und einbindung in Ticktsysteme, Projektverwaltung-Software, etc. gibt es auch.

Ich kann von meinen älteren Kollegen hier nicht verlangen, dass sie zusätzlich zu allem was beim umstieg von Foxpro auf C# auf sie zu kommt auch noch ein komplett neues konzept der quellcodeverwaltung verstehen sollen - das ist echt zu viel auf einmal 😕

Ich könnte auch Weiterhin VSS benutzen, der zeigt einem zwar an das eine Datei gerade exklusiv ausgecheckt ist, aber nicht von wem 😦

22.01.2010 - 08:51 Uhr

Mhm...
Also wenn jmd ein Hook braucht, das beim sperr-Versuch nachschaut ob die Datei schon von jmd gesperrt ist, dann hätte ich hier eines.

pre-lock.cmd:


@echo off

set SVN_REPOS=%1
set SVN_PATH=%2
set SVN_USER=%3
set SVNLOOK="C:\Programme\TortoiseSVN\svn\svnlook.exe"
set SVNPROG="C:\Programme\TortoiseSVN\svn\svn.exe"

set lock_owner=""
set lock_message=""

REM Skip one row of output, take second token, and delimiter is " "
for /f "skip=1 tokens=2" %%U in ('%SVNLOOK% lock %SVN_REPOS% %SVN_PATH%') do (
  set lock_owner=%%U
  goto :check_owner
)

:check_owner
if "%lock_owner%" == """" exit 0
if "%lock_owner%" == "%SVN_USER%" exit 0

for /f "skip=5 tokens=*" %%U in ('%SVNLOOK% lock %SVN_REPOS% %SVN_PATH%') do (
  set lock_message=%%U
)

@echo on
if not "%lock_message%" == """" (
echo -------------------------------------------------------------- 1>&2
echo Sorry %SVN_USER%... 1>&2
echo Fehler: Es konnte kein Lock auf die Datei erstellt werden! 1>&2
echo -------------------------------------------------------------- 1>&2
echo Die Datei: %SVN_PATH% 1>&2
echo Ist gesperrt von:  %lock_owner%. 1>&2
echo Lock message: %lock_message% 1>&2
exit 1 
)

Gut, die Pfade zum SVN müssen natürlich angepasst werden 😃
Ist noch nicht optimal, aber besser als gar keine Info ob jmd eine Datei schon gesperrt hat.

20.01.2010 - 17:36 Uhr

Er meint die CMD (Start-Ausführen) oder Windows-Taste + R und dann "cmd", danach ENTER 😃

Raus kommen sollte eine Program.exe entsprechend der Program.cs

Die frage ist nach dem Sinn, ob das sinnig ist ein Programm so zu kompilieren, wenn man doch ein Visual studio zum kompilieren hat?

20.01.2010 - 13:48 Uhr

Hallo 😃

Ich habe hier im Visual Foxpro die Möglichkeit mir einmal anzeigen zu lassen das eine Datei gerade exclusiv ausgecheckt wurde und mit einem Rechtsklick darauf und dann "Eigenschaften der Quellcodeverwaltung", habe ich einen Reiter "Auscheckstatus" in dem ich dann sehe von wem die Datei exclusiv ausgecheckt wurde.

Mit SourceSafe im Visual Studio sehe ich zwar auch wieder das jemand gerade eine Datei ausgecheckt habe, mit steht aber im rechtsklick auf die Datei kein "Eigenschaften der Quellcodeverwaltung" zur verfügung, somit weiss ich im Visual Studio nicht wer diese Datei gerade ausgeckeckt hat.

Mit AnkhSVN verhält sich das wiederum anders.
Der Status der Datei, wenn da jmd ein Lock drauf hat, wird mir gar nicht angezeigt.
Ich bekomme immer nur angezeigt, was lokal mit meiner Working Copy geschieht.
Holt sich nun jmd anders ein Lock in seinem WC, so bekomme ich davon nichts mit.
Einen Auscheckstatus im Rechtsklick gibt es mit AnkhSVN zwar auch nicht, aber im SVN kann man sich ein Hook schreiben, das vor dem Locking prüft ob diese datei schon gelockt ist - und im falle dessen dann Informationen über den Bearbeiter und der Sperre ausgibt.

Ist zwar auch nicht wirklich schön, aber besser als gar nicht zu wissen wer die Datei gerade im Zugriff hat.

Ja - ich brauche hier jetzt eine Lösung für SourceSafe UND SVN/AnkhSVN, da wir derzeit beides Parrallel nutzen (in verschiedenen Projekten).

13.01.2010 - 15:17 Uhr

hrm...
Auschecken und die aktuelle Version mit der vorherigen überschreiben hat bei meinem Test nicht funktioniert, da er eben gemeckert hat das die Versionen abweichen und ich erst ein update machen soll...

Ich werde es in einer ruhigen Minute noch mal versuchen,
Danke 😃

13.01.2010 - 14:05 Uhr

Hallo 😃

Kann man in einem Subversion-Repository eine revision löschen?

Beispiel:
Ich ändere dateien, commite sie und stelle danach fest, das ich sie garnicht commiten wollte.
Sei es das ich einen Fehler im Code committed habe, oder eine Datei, die nicht mit committed werden sollte.

In diesem Fall möchte ich die letzte revision löschen, so das die vorletzte version die HEAD version ist.

Jetzt kommt Ihr 😃

11.01.2010 - 14:14 Uhr

Hm.. ist ein interessantes Control.
Sowas hab ich auch mal gesucht, Dankeschön! 😃

Lustig ist das die Karten bei mir im "Server Only" mode gefühlt schneller laden, weil er im Cache mode erst alles auf die platte schreibt und meine platte wohl zu langsam dafür zu sein scheint 😃

Gibts denn schon diverse Codeschnipsel, die weiter helfen - außer die Beispiel-Anwendung?

28.12.2009 - 22:15 Uhr

In der Firma benutzen wir im Moment noch SourceSafe.
Meine Bestrebungen gehen dahin, dass wir in der Firma Subversion (und als Projektverwaltung Redmine) benutzen werden, weil das SVN-KnowHow durch ein paar kleine Projekte schon da ist und wohl alles besser zu sein scheint als SourceSafe.

Git hatte ich mir mal kurz angeschaut, konnte dem allen aber noch nicht so ganz folgen.
Das ist etwas, das man sich in ruhe anschauen muss, wofür man sich dann auch die entsprechende Zeit für nehmen muss.
Verteilte System wie Git machen mehr Sinn, wenn die Entwickler auch verteilt sitzen oder?
Bei uns in der Firma sind wir 8 Entwickler die jeden Tag zusammen im selben Büro sitzen.
Wir teilen uns einen Server und können von daher auch auf ein und den selben Datenbestand (ein Repository) zugreifen.

25.11.2009 - 08:19 Uhr

Oder, auch gern verwendet: SQLite
http://sqlite.phxsoftware.com

Oder wenns nicht all zu viele Daten sind, kann man auch ein DataSet als XML datei-Lokal ablegen 😉

16.11.2009 - 15:27 Uhr

Wow...
es hat etwas gedauert, aber ich habe den Fehler gefunden 😃

Die spalte in der dieser Fehler auftrat ist in VFP mit einem N(11,3) angelegt.
Dort könnte man jetzt eine 1000000,000 rein speichern.
In der Tabelle war in diesem Feld aber in einem Datensatz eine 11000000,00 gespeichert.

Was fällt auf?
Genau, sind immer noch 11 stellen, aber die Dezimalstellen haben sich auf 2 reduziert.
Warum Foxpro so was macht? hm.. fragt mich bitte nicht, könnt ihr vermutlich gern mit Herrn Roden ausdiskutieren 😃

Auf jeden Fall mag der OLEDB Treiber für VFP so was nicht.
Wenn man die Tabelle überarbeitet und solche Fehler raus nimmt, so das alle Werte wieder 3 Stellen nach dem Komma haben, dann funktioniert das auslesen auch wieder 😃

Vielleicht hat ja mal noch irgend jmd. so ein Problem und findet dies hier dann hilfreich 😃

13.11.2009 - 11:23 Uhr

verwendetes Datenbanksystem: Visual Foxpro DBF

Hallo 😃

Ich bin grad dabei ein übernahme-Programm zu schreiben, das Daten von einer VFP-Datenbank in eine MySQL-Datenbank schaufelt.

Im großen und ganzen funktioniert dies auch.
Insgesamt sind es 370 Tabellen die übernommen werden.
Bei 3 von ihnen kommt alleridngs folgender Fehler wenn ich die Daten der Tabellen mit einem "SELECT* FROM Tabelle" in eine Datatable laden möchte:


Anbieter konnte den Decimal-Wert nicht ermitteln. Zum Beispiel: die Zeile wurde gerade erstellt, der Standard für die Decimal-Spalte nicht verfügbar und der Consumer hat noch keinen neuen Decimal-Wert gesetzt.

Ich finde bei google nicht wirklich etwas dazu.
Hat jemand diesen Fehler schon mal gehabt und hat eine Idee zur lösung des Problems?

Danke! 😃

17.09.2009 - 13:31 Uhr

Da liegt es ja nur an dir hier eine "Immer wieder und immer wieder gezeigte herangehensweise" zu verlinken.

Bezüglich des Selects:

itte nicht wegen usings oder Disposes meckern - dies ist nur ein kleines Testprogramm, das ich extra hierfür geschrieben habe 😃

^^ nächste mal schreib ich Selects mit dazu 😉

Der Code ist dafür gut das Problem zu demonstrieren um es halbwegs verständlich nachvollziehen zu können.

An dieser stelle könntest du auch schreiben, was an Parametern in Selects toller ist als an welchen ohne Parametern.

Was ich sagen möchte: Dein Anliegen an den geneigten Thread-Poster kannst du sehr wohl auch etwas höflicher formulieren - ist für uns alle Produktiver 😃

Dankeschön!

17.09.2009 - 12:16 Uhr

Mhm..
Ein bissl googeln ergab folgendes...

Wenn ich in meinen Button, der das SyncTab aufruft folgendes rein setze:


txt_firma.DataBindings["Text"].BindingManagerBase.EndCurrentEdit();
txt_strasse.DataBindings["Text"].BindingManagerBase.EndCurrentEdit();
txt_ort.DataBindings["Text"].BindingManagerBase.EndCurrentEdit();
txt_plz.DataBindings["Text"].BindingManagerBase.EndCurrentEdit();

Dann bekommt die DataTable an der die Textboxen gebunden sind den RowState "Modified" und die änderungen werden in die Datenbank übernommen.

Macht vielelicht sogar Sinn - aber richtig schön find ich das irgednwie nicht 🤔

17.09.2009 - 11:18 Uhr

Hallo 😃

Ich habe ein Problem mit dem Updaten eines DataAdapters.
Dieser macht das Update nicht, weil er in der DataTable, die ihm zugrunde liegt keine Änderungen feststellen kann.

Ich benutze ein Datagridview um die Daten in der Tabelle anzeigen zu lassen.
Ändere ich die Daten direkt in dem DataGridView, dann sind auch Änderungen (Modified) in der DataTable vorhanden und die Tabelle wird auch geupdatet - so wie es sein soll.

Wen ich nun aber ein paat Textboxen an diese DataTable binde, dann werden keine Änderungen mehr erkannt.

Die Textboxen binde ich wie folgt an die DataTable:


private void TestForm_Load(object sender, EventArgs e)
{
    db = mysql.GetInstance;
    dataGridView1.DataSource = db.select_in_datatable("SELECT * FROM adressen WHERE kdnr=1");

    txt_firma.DataBindings.Add("Text", (DataTable)dataGridView1.DataSource, "firma");
    txt_strasse.DataBindings.Add("Text", (DataTable)dataGridView1.DataSource, "strasse");
    txt_ort.DataBindings.Add("Text", (DataTable)dataGridView1.DataSource, "ort");
    txt_plz.DataBindings.Add("Text", (DataTable)dataGridView1.DataSource, "plz");
}

Mit einem Button übernehme ich dann die Änderungen:


private void button1_Click(object sender, EventArgs e)
{
Console.WriteLine(((DataTable)dataGridView1.DataSource).Rows[0].RowState.ToString());
    db.SyncTab((DataTable)dataGridView1.DataSource, "SELECT * FROM adressen");
}

und SyncTab macht dann das update:


public void SyncTab(DataTable data, string SQLquery)
{
    using (MySqlConnection sql_conn = new MySqlConnection(ConnectionString))
    {
        sql_conn.Open();
        MySqlCommand sql_cmd = sql_conn.CreateCommand();
        sql_cmd.CommandText = "" + SQLquery + "";
        MySqlDataAdapter sql_da = new MySqlDataAdapter(sql_cmd);
        sql_ds = new DataSet();
        sql_da.Fill(sql_ds, "adressen");
        MySqlCommandBuilder sql_cb = new MySqlCommandBuilder(sql_da);
        sql_da.Update(data);
        sql_conn.Close();
    }
}

Bitte nicht wegen usings oder Disposes meckern - dies ist nur ein kleines Testprogramm, das ich extra hierfür geschrieben habe 😃

15.09.2009 - 09:27 Uhr

Guten Morgen...
Ich bin grad zufällig über diesen Artikel gestolpert:
http://www.faq-o-matic.net/2008/04/20/automatische-backups-fr-sql-server-express/

Dort heisst es im 2. Abschnitt:

...die Größe der verwaltbaren Datenbanken ist begrenzt, und es können nur wenige Benutzer gleichzeitig performant arbeiten...

Kann diese jemand diese Aussage bestätigen?
Angesichts dessen das man den Express nicht auf allen verfügbaren Kernen laufen lassen kann und er nur max 1GB RAM verwenden will gibt es sicherlich eine Einschränkung der Anzahl an Benutzern was auch mit der Performace zusammenhängen wird.
Aber was meint er mit "wenigen" Benutzern?

02.09.2009 - 12:51 Uhr

Ich hatte damals auf einen er ersten eee-PC´s dies damals gab einige sachen laufen geahbt und davon noch Screnschots...

😄

20.08.2009 - 14:00 Uhr

Danke für die Ideen.
Das mit den using-Blocks kommt noch - versprochen 😃
Erstmal möchte ich die Funktion haben.

Ich hab jetzt einfach mal brutal vor dem Update folgendes gemacht:


for (int i = 0; i < ds_temp.Tables[0].Rows.Count;i++ )
{
    ds_temp.Tables[0].Rows[i].SetModified();
}

Und nö - bringt genau gar nichts.

Das is ja auch das komische.
Weil: Durch die Manuelle Anderung in der Schleife ist der RowState ja schon geändert, sonst würde er die Manuellen Änderungen ja nicht übernehmen.

Bei z.B: folgendem:


for (int i = 0; i < ds_temp.Tables[0].Rows.Count;i++ )
{
    ds_temp.Tables[0].Rows[i]["feld2"] = DateTime.Now.ToLongTimeString();
    ds_temp.Tables[0].Rows[i].SetModified();
}

^^ beschert er sich auch mit folgendem Fehler:


SetAdded und SetModified können nur für DataRows mit Unchanged DataRowState aufgerufen werden.

Ergo, der State hat sich schon geändert, weil ich schon versucht habe das DateTime da rein zu knüppeln.
Das Datetime ändert er dann auch, aber den Rest der Zeile nicht.

Wollt ihr mein Beispiel-Projekt haben? 😉

20.08.2009 - 12:59 Uhr

verwendetes Datenbanksystem: <VFP DBF über OleDB>

Hallo 😃
Ich versuche hier gerade ein kleines Backup-Programm zu bauen.
Dieses soll 2 Tabellen öffnen und miteinander abgleichen (von links nach rechts).
Die Tabellen sind DBF Daten aus Visual Foxpro, befinden sich in einer DBC.

Auslutschen tuh ich die auf folgende weise:


Console.WriteLine("Verbindung DB1");
//string ConnectionString_echt = "Provider=vfpoledb.1;Data Source=E:\\vfp\\testdb;Collating Sequence=general;";
string ConnectionString_echt = "Provider=vfpoledb;Data Source=E:\\vfp\\testdb\\daten1.dbc;Collating Sequence=machine;";
OleDbConnection sql_conn = new OleDbConnection(ConnectionString_echt);
DataSet sql_ds = new DataSet();
OleDbCommand sql_cmd = new OleDbCommand("SELECT * FROM "+Tabelle+"", sql_conn);
OleDbDataAdapter sql_da = new OleDbDataAdapter(sql_cmd);
Console.WriteLine("DB1: DataSet füllen");
sql_da.FillSchema(sql_ds, SchemaType.Source);
sql_da.Fill(sql_ds);

DataTable sql_tbl = sql_ds.Tables[0];
Console.WriteLine("DB1: PKEY festlegen");
DataColumn[] dc = { sql_tbl.Columns["id"] };
sql_tbl.PrimaryKey = dc;

Das selbe dann auch noch mal für die 2. tabelle.

Um die Anderungen in einer komplett anderen Tabelle zu haben, habe ich mir ein Temp-Zwischen-DataSet angelegt und Merge die anderen beiden DataSets in dieses DataSet hinein:


DataSet ds_temp = new DataSet("Tempding");
ds_temp.Merge(sql_ds_bk);
ds_temp.Merge(sql_ds);

Irgendwann möchte ich dies dann in die Backup-Tabelle zurück schreiben.
Dies soll über den Update eines DataAdapters geschehen:


// Tabelle Updaten
OleDbCommandBuilder sql_cb = new OleDbCommandBuilder(sql_da_bk);
sql_cb.ConflictOption = ConflictOption.OverwriteChanges;
try
{
    sql_da_bk.UpdateCommand = sql_cb.GetUpdateCommand();

    Console.WriteLine("DB2: Tabelle Updaten");
    sql_da_bk.Update(ds_temp);
}
catch(Exception ex) {
    Console.WriteLine(ex.Message);
}

Das Problem ist jetzt: Er Updatet da nixx 😦

Ich habe mir jetzt mal zum testen die Mühe gemacht und werte Einzeln zugewiesen:


for (int i = 0; i < ds_temp.Tables[0].Rows.Count;i++ )
{
    Console.WriteLine("wert in row1:" + sql_ds.Tables[0].Rows[i]["feld1"].ToString());
    string lala = sql_ds.Tables[0].Rows[i]["feld1"].ToString();
    ds_temp.Tables[0].Rows[i]["feld1"] = lala.ToString();
    ds_temp.Tables[0].Rows[i]["feld2"] = DateTime.Now.ToLongTimeString(); //sql_ds.Tables[0].Rows[i]["feld2"].ToString();
    ds_temp.Tables[0].Rows[i]["feld3"] = "feld3" + i.ToString(); //sql_ds.Tables[0].Rows[i]["feld3"].ToString();
}

Feld2 (die Uhrzeit) und Feld3("feld3+i") übernimmt er dann in meine Backup-Tabelle mit dem Update-Befehl des DataAdapters.
Das Feld "Feld1" mit dem Inhalt aus der anderen DataTable übernimmt er nicht.

Ist irgendwie ein wenig unlogisch (für mich).

Hat da jetzt zufällig irgend jemand eine Idee zu warum das so ist und wie man das zum funktionieren bringen könnte?

Danke,
Sven

18.08.2009 - 10:56 Uhr

Tja... Wo ist da die Denker-Lücke?

Dickes Unternehmen mit 9 Niederlassungen allein in Deutschland, arbeiten alle unter Windows2000 Advanced Server auf Machinen jenseits von gut und böse und haben keinen grund auf Win2003 oder Win2008 zu upgraden...

Oder Microsoft, die das .Net nicht weiter für die "älteren" Systeme anbieten.

Manchmal ist es doch echt ein Teufelskreis 😦

Aber egal.
Ich hab die Proxy-Klasse jetzt weg gelassen und binde den Webservice direkt als referenz mit ein.

17.08.2009 - 23:59 Uhr

ui... da mzuss ich mich in WCF einlesen.. mhm...
Gibts das denn schon fürs .NET 2.0 FW?
Bin leider auf Funktion unter Windows2000 Servern angewiesen 😦

17.08.2009 - 16:55 Uhr

Und weiter geht es...

Irgendwo bei Google habe ich jetzt gefunden das man alle

<soap:body use="encodet"...

durch:

<soap:body use="literal"

in der WSDL Datei ersetzen kann.

Damit funktioniert zumindest das aufrufend er wsdl.exe ohne fehler.

Das Problem mit dem Versionskonflikt besteht weiterhin.

17.08.2009 - 15:59 Uhr

Sooo...
Jetzt habe ich etwas geforscht.

Ein Fehler kommt schon beim erstellen der Proxy-Klasse durch wsdl.exe:


Microsoft (R)-WSDL-Tool (Web Services Description Language)
[Microsoft (R) .NET Framework, Version 2.0.50727.42]
Copyright (C) Microsoft Corporation. All rights reserved.
Warnung: Dieser Webverweis entspricht WS-I Basic Profile, Version 1.1, nicht.
R2706: Ein wsdl:binding-Element in einer Beschreibung MUSS den literal-Wert für
das Verwendungsattribut in allen soapbind:body-, soapbind:fault-, soapbind:heade
r- und soapbind:headerfault-Elementen verwenden.

Bedeutet, das NuSoap kein schickes wsdl ausgeben kann, welches von der wsdl.exe zum erstellen einer proxyklasse benötigt wird 😦

un nu?

17.08.2009 - 11:28 Uhr

Guten Morgen 😃

Ich habe von meinem Webservice jetzt mal mit der wdsl.exe eine Proxy-Klasse gebaut.

Aufgerufen hab ich das so:


wsdl.exe /language:CS /n:"tA.WS.TrackTracing" http://demo.ttest.de/soap/server.php?wsdl

Benutze ich diese Proxy-Klasse nun in meinem C#-Projekt und möchte es kompilieren, bekomme ich folgenden fehler:


Möglicher SOAP-Versionskonflikt: Unerwartetes Einschließen des Namespaces 'http://schemas.xmlsoap.org/wsdl/'. Erwartet wurde http://schemas.xmlsoap.org/soap/envelope/.

Warum?
Wenn ich den Webservice normal über einen Verweis hinzufüge, dann funktioniert er ohne Probleme.
Über die Proxy-Klasse kommt der Fehler.

14.08.2009 - 09:42 Uhr

Ah...
habs schon 😃


foreach (Kundentabelle kundentab in Kunden)
{
    Type type = kundentab.GetType();
    foreach (PropertyInfo info in type.GetProperties())
    {
        object value = info.GetValue(kundentab, null);
        if (value == null)
        {
            Console.WriteLine("NULL");
        }
        else
        {
            Console.WriteLine(value.ToString());
        }
    }
}

^^ Damit funktioniert das schon ganz gut 😃

14.08.2009 - 09:18 Uhr

Hallo 😃

Ich habe mit einen Webservice mit NuSoap (PHP) geschreiben, welcher mir aus einer MySQL-Datenbnak Bestimmte Datensätze ausgibt.

Dafür habe ich für NuSoap ein CompleyType "Kundentabelle" erstelle, welche die Felder als Eigenschaften umsetzt.
Um mehrere Zeilen zu übergeben, habe ich noch ein Array "KundenArray" in Nusoap Definiert.
Wäre dann: KundenArray => KundenTabelle[]

Was ich in meinem C# Client jetzt bekomme, ist ein Array mit Objekten vom Typ KundenTabelle.
Kundentabelle ist aber selbst kein Array, sondern eine Sammlung von Eigenschaften, weil NuSoap das so umsetzt.

Wenn ich jetzt das, was ich übergeben bekomme (das Array), an ein Datagridview als DataSource binde, dann sehe ich schon schön die Zeilen 😃

So...
Jetzt muss ich das ganze Array aber in eine DataTable bekommen, von dort aus mit WriteXML in eine XML datei um sie dann in einem anderen Programm weiter verarbeiten zu können.

Die spalten der Zeilen, gebe ich mir mittlerweile als String aus und baue mir meine DataTable dann so auf:


string tabstru = wdsl.Get_KundenStructure(cred, "e_usr";);

DataTable dt = new DataTable();
foreach (string feld in tabstru.Split(';'))
{
dt.Columns.Add(feld);
Console.WriteLine(UnregKunden[0]);
}

Jetzt muss ich da noch die Inhalte der Felder rein bekommen.


Kundentabelle[] kunden = wdsl.Get_KundenUnregistriert(cred);

^^ gibt mir erstal mein Array in dem Jeweils die Objekte mit Eigenschaften stehen.

^^ sind halt viele, viele eigenschaften.
Jetzt die Frage:
Wie kann ich denn die Eigenschaften alle in einer Schleife durch gehen, so das ich sie im Code ansprechen kann?

Normalerweise kann ich sie z.B. so ansprechen:


string kunden_adresse = kunde[0].adresse;

Aber wie mach ich sowas in einer Schleife?

Steh grad voll aufm Schlauch 😕

09.08.2009 - 12:14 Uhr

Hey - wenn das wer macht, spende ich meine 10 Euro dazu...
Ich such sowas auch schon seit dem mein Email-Server das letzte mal den geist aufgegeben hat und alle Mails futsch waren 😦
Hatte aber bis jetzt noch keine lust sowas selbst zu Programmieren 😉

01.08.2009 - 18:02 Uhr

Danke euch - sieht schon mal vielversprechend aus..
werde mal damit herumexperimentieren 😃

01.08.2009 - 13:52 Uhr

bei lizenzen@microsoft.de ?
Wie lange muss man da warten?

Sry - hab noch nie eine Mail an Microsoft geschrieben - null Erfahrung mit 😕

01.08.2009 - 12:47 Uhr

Frage: Darf man die Software, welche im MSDN-Paket enthalten ist nur für Testzwecke Benutzen - oder auch für den Internen Produktiv-Betrieb?

Im konkreten Fall:
Wir haben einen Buildserver unter Windows XP laufen, auf dem Regelmässig Updates Kompiliert werden.
Nun hat das Genue zugeschlagen und meldet eine event. Softwarefälschung (Ich schiebe es einfach mal auf den Azubi 😛)
Kann ich jetzt ein XP aus dem MSDN Paket nehmen und darauf unseren Buildserver neu aufsetzen - Lizenztechnisch gesehen?

Weil...
Der TFS-Workgroup Ist auch bestandeil des MSDN-Paketes und man darf ihn zum entwickeln produktiv benutzen.

Und.. Beim Empower Programm habe ich wohl auch gelesen das man die Software Intern produktiv benutzen darf.

Kann da mal jmd weiterhelfen?

Danke 😃

01.08.2009 - 12:28 Uhr

Guten Morgen 😃

Gibt es die Möglichkeit irgendwie die Zellen einer Zeile zu ui einer Einzelnen Zelle über mehrere Spalten zusammenzufassen?

Soll dann so aussehen (Frickelig dahin geschmiert) :


------------------------------------
|Spalte1 |Spalte2 |Spalte3|Spalte4 |
------------------------------------
|wert1   |wert2   |wert3  |wert4   |
| Langer text in Einzelner Zelle   |
|wert5   |wert6   |wert7  |wert8   |
------------------------------------

^^ Ich hoffe man kann es erkennen 😕

Hintergrund:
Ich brauch ein Datagridview für einen Lieferschein.
Da können nämlich sowohl Inahltsangaben, Gewichte, Einzelabmessungen, aber eben auch Langtexte für Informationen eingegeben werden.

Dankeschön 😃

30.07.2009 - 12:04 Uhr

Normalerweise benutzt du in deinem Programm doch "nur" einen verweis auf die MySql.Data.DLL - diese musst du beim Veröffentlichen auch "nur" mit ausliefern.

27.07.2009 - 23:44 Uhr

Das sieht gut aus, werd ich mal anschauen 😃

Darf ich eben noch fragen wie du das gefunden hast?