Ja klingt logisch aber ich muss system minformationen auslesen wie den komputernamen und wie soll ich das sonst realisiren ist halt der erste dienst den ich schreibe.
Klingt logisch is aber ne berechtigte frage ob man es darf oder nicht.
Hallo ich möchte in einem Dinst folgendes verwenden:
System.Windows.Forms.SystemInformation.(*)
mag sein das ich zu blöd bin aber wi sol ich das in einem service verenden da ich
using System.Windows.Forms;
ja nicht verwenden kann.
were suzper wenn mir wer helfen kann.
ja danke.
Feldnamen in [] und es geht, das ü sollte man nicht verwenden aber is nich das Problem habs aber trozdem rausgenommen.
Das waren meine beiden Fehler nach 2 Tagen den gleichen Code ansehen sieht man sowas einfach nicht mehr.
verwendetes Datenbanksystem: Access 2003
Hallo zusammen,
Ich habe Folgendes Problem:
Ich habe 3 Funktionen die ersten beiden generieren mir ein UPDATE/INSERT Komando.
Klasse zur generirung des UPDATE Komandos:
public bool dbUpdateData(string[] str_data, string str_tbl_Name)
{
bool status = false;
string str_SQL = "UPDATE " + str_tbl_Name + " SET ";
string[] str_tblColummNames = getCollomNames(str_tbl_Name);
for (int i = 0; i < str_data.Length; i++)
{
if (i < str_data.Length - 1)
{
if (str_data[i] != "0" && str_data[i] != "1")
{
str_SQL = str_SQL + str_tblColummNames[i] + " = '" + str_data[i] + "', ";
}
else if (str_data[i] == "0" || str_data[i] == "1")
{
str_SQL = str_SQL + str_tblColummNames[i] + " = " + Convert.ToInt16(str_data[i]) + ", ";
}
}
else if (i == str_data.Length - 1)
{
if (str_data[i] != "0" && str_data[i] != "1")
{
str_SQL = str_SQL + str_tblColummNames[i] + " = '" + str_data[i] + "' WHERE " + str_tblColummNames[0] + " = '" + str_data[0] + "'";
}
else if (str_data[i] == "0" || str_data[i] == "1")
{
str_SQL = str_SQL + str_tblColummNames[i] + " = " + Convert.ToInt16(str_data[i]) + " WHERE " + str_tblColummNames[0] + " = '" + str_data[0] + "';";
}
}
}
for (int i = 0; i < ds_InventarDB.Tables[str_tbl_Name].Rows.Count; i++)
{
if (str_data[0] == ds_InventarDB.Tables[str_tbl_Name].Rows[i][0].ToString())
{
for (int j = 0; j < str_data.Length; j++)
{
if (str_data[j] != "0" && str_data[j] != "1")
{
ds_InventarDB.Tables[str_tbl_Name].Rows[i][j] = str_data[j];
}
else if (str_data[j] == "0" || str_data[j] == "1")
{
ds_InventarDB.Tables[str_tbl_Name].Rows[i][j] = Convert.ToInt16(str_data[j]);
}
}
i = ds_InventarDB.Tables[str_tbl_Name].Rows.Count;
}
}
status = dbConnect(str_SQL, str_tbl_Name, false, true, false, false);
return status;
}
Klasse zur generirung des INSERT Komandos:
public bool dbAddData(string[] str_data, string str_tbl_Name)
{
bool status = false;
DataRow row = ds_InventarDB.Tables[str_tbl_Name].NewRow();
string str_SQL = "INSERT INTO " + str_tbl_Name + " (";
string[] str_tblColummNames = getCollomNames(str_tbl_Name);
for (int i = 0; i < str_tblColummNames.Length; i++)
{
if (i < str_tblColummNames.Length - 1)
{
str_SQL = str_SQL + str_tblColummNames[i] + ", ";
}
else if (i == str_tblColummNames.Length - 1)
{
str_SQL = str_SQL + str_tblColummNames[i];
}
}
str_SQL = str_SQL + ") VALUES(";
for (int i = 0; i < str_data.Length; i++)
{
row[i] = str_data[i];
if (i < str_data.Length - 1)
{
if (str_data[i] != "0" && str_data[i] != "1")
{
str_SQL = str_SQL + "'" + str_data[i] + "', ";
}
else if (str_data[i] == "0" || str_data[i] == "1")
{
str_SQL = str_SQL + Convert.ToInt16(str_data[i]) + ", ";
}
}
else if (i == str_data.Length - 1)
{
if (str_data[i] != "0" && str_data[i] != "1")
{
str_SQL = str_SQL + str_data[i];
}
else if (str_data[i] == "0" || str_data[i] == "1")
{
str_SQL = str_SQL + Convert.ToInt16(str_data[i]);
}
}
}
str_SQL = str_SQL + ");";
ds_InventarDB.Tables[str_tbl_Name].Rows.Add(row);
status = dbConnect(str_SQL, str_tbl_Name, false, false, true, false);
return status;
}
Die drite Funktion ist für den Datenbankzugrif und sieht wie folgt aus:
private bool dbConnect(string str_SQL, string str_tbl_Name, bool select, bool update, bool insert, bool delet)
{
string str_DBDatei = Properties.Datenbank.Default.path_DB.ToString();
bool status = false;
if (File.Exists(str_DBDatei) == true)
{
/* try
{ */
//Connection
OleDbConnection odc_dbConnect = new OleDbConnection();
odc_dbConnect.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + str_DBDatei;
//Command
OleDbCommand odcom_SQL = new OleDbCommand();
odcom_SQL.CommandText = str_SQL;
odcom_SQL.Connection = odc_dbConnect;
//DataAdapter
OleDbDataAdapter odda_Tbl = new OleDbDataAdapter();
if (select)
{
odda_Tbl.SelectCommand = odcom_SQL;
}
else if (update)
{
odda_Tbl.UpdateCommand = odcom_SQL;
}
else if (insert)
{
odda_Tbl.InsertCommand = odcom_SQL;
}
else if (delet)
{
odda_Tbl.DeleteCommand = odcom_SQL;
}
if (select)
{
odda_Tbl.Fill(ds_InventarDB, str_tbl_Name);
}
else if (update || insert || delet)
{
odda_Tbl.Update(ds_InventarDB.Tables[str_tbl_Name]);
}
odc_dbConnect.Close();
status = true;
/* }
catch
{
status = false;
}*/
}
return status;
}
Die folgende INSERT Anweisung wurde direkt von der Entsprechneden Klasse erstellt ich habe sie wehrend der Laufzeit rauskopiert:
INSERT INTO tbl_InventarNB (Inventarnummer, Seriennummer, Modellnummer, Herstellernummer, Hersteller, Typ, Computername, Domain, LanIP, Lan, WLanIP, WLan, CPU, Tacktrate, RAMM1, Grafikkarte, RAMM2, HDD, FDD, CDDVD, Akkunummer1, Akkunummer2, Verfügbarkeit)
VALUES('NB-087', 'CNU74026Q9', 'GB955EA#ABD', 'C8510PTT7500W5X16GIBNF10QEGR', 'HP', 'Compaq 8510p', 'GONENB087', 'gmanet.de', '', '00-17-A4-EA-BD-B2', '', '00-13-E8-DA-B5-BD', 'Core2 Duo', '2.20 GHZ', '2048 MB', 'ATI Mobility Radeon HD 2600', '256 MB', '150 GB', 0, 'DVD-R/W', '6501801B5V13R0', '9507A4', 0);
dan bekomme ich bei:
odda_Tbl.Update(ds_InventarDB.Tables[str_tbl_Name]);
einen:
Syntaxfehler in der INSERT INTO-Anweisung.
wenn ich die Abfrage in Access direkt ausführe macht er es.
Das gleiche Problem habe ich bei den UPDATE Komandos.
vieleicht binn ich nach mehr als 36 Stunden Fehlersuche einfach nur Blind und Sehe den Fehler nicht were supper wenn mal jemand drüberschauen könnte.
Ich hatte auch schon folgenden beitrag gefunden :
Original von der Marcel
Evtl. hast du gar keinen Fehler und es könnte daran liegen: Schau dir mal im VS die Eigenschaften der mdb an. Wenn dort bei "In Ausgabeverzeichnis kopieren" immer kopieren ausgewählt ist, dann wird bei jedem compilieren die neue leere DB aus dem Projektverzeichnis in das Debug bzw Release-Verzeichnis kopiert
Dies trift aber Hir nicht zu da die Datenbank auf einem Netzlaufwerk liegen muss und für mehrere User zugenglich seihn soll.
danke für die schnelle Antwort aber wie kann ich es dann lösen?
ich wollte die Namen der Columns auslesen und in ein Array schreiben ich hab es wie folg probiert:
string[] str_dbColummNames = new string[ds_InventarDB.Tables[str_tbl_Name].Columns.Count];
ds_InventarDB.Tables[str_tbl_Name].Columns.CopyTo(str_dbColummNames, i);
aber ich bekomme die Meldung:
Mindestens ein Element im Quellarray konnte nicht in den Zielarraytyp umgewandelt werden.
vielleicht mache ich einen generellen Fehler wäre super wen mir jemand helfen kan.
Danke euch beiden für die schnellen Antworten.
Ich habe mich erst mal für die Lösung von Killerhase entschieden da ich diese sehr schnell implementieren konnte werde mich aber wenn ich etwas Luft habe mit herbivore Vorschlag beschäftigen da dies extrem interessant ist.
Hallo ich habe ein kleines Logisches Problem:
Ich habe ein String Array mit momentan 25 Modell Bezeichnungen dis kann aber ansteigen.
Mein Problem ist das einige Bezeichnungen doppelt vorkommen und ich brauche ein Array in dem jede Bezeichnung nur einmal vorkommt.
Die einzige Möglichkeit die mir einfällt ist mit mehreren schleifen und meiner Meinung nach nicht sehr sauber.
ich wäre für jeden Tipp dankbar.
jo danke bei mir leuft es in der Komplexibilität auf das selbe hreaus ich muss sogar noch ip-Addressen ändern und eine Wlan verbindung aufbauen.
Ich schau mir das ma an. Danke noch ma.
hallo ich habe folgendes Problem ich muss ein Programm schreiben mit dem ich dei LAN Vindung Deaktiviren und die WLAN Vbindung Aktiviren kann. ich habe aber noch keine Idee wie ich das realisiren Kann was auch noch wichtig ist das ich die Wlan verbindung mit einem in der Software Hinterlegtem Schlüssel herstelle und dieser nicht in der Standart Windows anwendung hinterlegt ist.
Dasganze mus dan auch wieder anderstrum gehen.
Hollo ich habe in problem das ich einfach nicht verstehe.
Ich habe eine INSERT Anweisung:
INSERT INTO tbl_Step VALUES(7, 1, 'TEST 01', 'TEST 02', 'test 01')
diese Anweisung übergebe ich an die folgende methode:
public void Insert_db(string str_SQL, DataSet ds_Job, string tabelle)
{
//Connection
OleDbConnection odc_ins_Tbl = new OleDbConnection();
odc_ins_Tbl.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Properties.Settings.Default.path_DB;
//Command
OleDbCommand odcom_Insert = new OleDbCommand();
odcom_Insert.CommandText = str_SQL;
odcom_Insert.Connection = odc_ins_Tbl;
//DataAdapter
OleDbDataAdapter odda_ins_Tbl = new OleDbDataAdapter();
odda_ins_Tbl.InsertCommand = odcom_Insert;
//CommandBuilder
OleDbCommandBuilder odcb_ins_Tbl = new OleDbCommandBuilder();
odcb_ins_Tbl.DataAdapter = odda_ins_Tbl;
odda_ins_Tbl.Update(ds_Job.Tables[tabelle]); // hir trit der fehler auf
odc_ins_Tbl.Close();
}
dan bekomme ich folgende Fehlermeldung:
Die von Ihnen vorgenommenen Änderungen an der Tabelle konnten nicht vorgenommen werden, da der Index, Primärschlüssel oder die Beziehung mehrfach vorkommende Werte enthalten würde. Ändern Sie die Daten in den Feldern, die gleiche Daten enthalten, entfernen Sie den Index, oder definieren Sie den Index neu, damit doppelte Einträge möglich sind, und versuchen Sie es erneut.
In der tabeller ist die 7 im primerschlüssel noch nicht vorhanden und es wird keine bezihung verletzt da es keine gibt. Und auser dem feld in das die 7 geschrieben werden soll ist kein anderes feld indizirt.
Das was ich aber noch weniger verstehe is das er es denoch in die DB schreibt.
Were super wenn mir wer helfen kan.
Hallo zusammen,
Ich habe folgendes Problem ich Oberfleche zum eingeben des Neuen inventars erstellun und den hersteller und das Model in Checkbox an hand denen schon vorhandenen auswählen lassen.
DataSet dsHandyHersteller = new DataSet();
DataSet dsHandyTyp = new DataSet();
using (OleDbConnection connHerstellerTyp = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=P:\\TestDB\\TestDB.mdb"))
{
OleDbDataAdapter adapterHersteller = new OleDbDataAdapter();
adapterHersteller.SelectCommand = new OleDbCommand("SELECT Inventar.Hersteller FROM Inventar GROUP BY Inventar.Hersteller ORDER BY Inventar.Hersteller", connHerstellerTyp);
OleDbCommandBuilder builderHersteller = new OleDbCommandBuilder(adapterHersteller);
adapterHersteller.Fill(dsInventarHersteller, "InventarHandy");
OleDbDataAdapter adapterTyp = new OleDbDataAdapter();
adapterTyp.SelectCommand = new OleDbCommand("SELECT Inventar.Typ FROM Inventar GROUP BY Inventar.Typ ORDER BY Inventar.Typ", connHerstellerTyp);
OleDbCommandBuilder builderTyp = new OleDbCommandBuilder(adapterTyp);
adapterTyp.Fill(dsInventarTyp, "Inventar");
}
cbHersteller.DataSource = dsInventarHersteller.Tables[0];
cbModel.DataSource = dsInventarTyp.Tables[0];
Allerding geht das nicht ich bekomme zwar keine Fehlermeldung aber in den Checkbox steht nur System.Data.DataRowView.
Ich habe bisher noch keine grose erfarung im bereich ado alerdings habe ich in mehreren büchern nichts in dieser art gefunden wehre super wen mir jemand helfen kann.
Da ich leiser grad total auf dem schlauch stehe könntest du das mal in einem Beispiel verdeutlichen ich versuch das seit gestern der teil den ich habe war kein Problem nach dem ich wusste mit was es realisiert werden kann aber da hab ich echt keine Ahnung mehr.
Wehre echt super.
Falls du .net 2.0 verwendest schau dir da mal die BackgroundWorker-Komponente an.
Ja mache ich.
Also ich hab das Jetzt mal gebastelt aber ich habe das Problem das ich nicht weiß wie ich die Progressbar aktualisiere.
mir ist klar das ich das mit:
this.backgroundWorker1.ReportProgress();
in
private void bgwVortschritt_DoWork(object sender, DoWorkEventArgs e)
machen muss aber ich weiß nicht wie da ich ja keine schleife verwende.
Vielleicht kann mir ja wer Helfen.
private void bgwVortschritt_DoWork(object sender, DoWorkEventArgs e)
{
if (rdbDatei.Checked == true || rdbDateiHash.Checked == true)
{
string Datei = e.Argument.ToString();
byte[] Buffer;
MD5CryptoServiceProvider MD5;
FileStream FS = new FileStream(@Datei, FileMode.Open, FileAccess.Read);
MD5 = new MD5CryptoServiceProvider();
Buffer = MD5.ComputeHash(FS);
string HashDatei = System.BitConverter.ToString(Buffer).Replace("-", "");
HashDatei = HashDatei.ToLower();
e.Result = HashDatei;
FS.Close();
}
else if (rdbPasswortHash.Checked == true)
{
string Pass = e.Argument.ToString();
MD5 md5 = new MD5CryptoServiceProvider();
byte[] PassDatenBuffer = Encoding.Default.GetBytes(Pass);
byte[] HashDatenBuffer = md5.ComputeHash(PassDatenBuffer);
string Hash = System.BitConverter.ToString(HashDatenBuffer).Replace("-", "");
Hash = Hash.ToLower();
e.Result = Hash;
}
}
private void bgwVortschritt_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
pgbVortschritt.Value = e.ProgressPercentage;
}
Ich verwende die Folgende Funktion Um einen Datei Hash zu erzeugen.
private string DateiHash(string Datei)
{
byte[] Buffer;
MD5CryptoServiceProvider MD5;
FileStream FS = new FileStream(@Datei, FileMode.Open, FileAccess.Read);
MD5 = new MD5CryptoServiceProvider();
Buffer = MD5.ComputeHash(FS);
FS.Close();
string HashDatei = System.BitConverter.ToString(Buffer).Replace("-", "");
HashDatei = HashDatei.ToLower();
return HashDatei;
}
Da dies bei größeren Dateien etwas dauern kann würde ich den vorschritt gerne in einer Progressbar anzeigen ich hab aber keinen Schimmer wie.
Wehre echt super wen mir jemand helfen könnte.
Danke DaSchroeter genau das habe ich gesucht läuft einbanfrei. 👍 👍 👍
Hallo,
ich habe ein string Array mit beliebiger Größe (min 100) und ich will prüfen ob keiner der Inhalte Doppelt ist. Mir fallen aber nur sehr umständliche Wege ein. Wäre super en mir jemand eine einfache nennen könnte (falls es eine gibt).
Hallo
Ich habe eine Frage gibt es eine Möglichkeit zu prüfen ob der inhalt einer Integer Variablen eine grade oder ungerade Zahl ist.
das wars was ich wissen wollte danke.
Nein ich erwart keinen fertigen Code sonst hätte ich mich ja beschwert das keine Verweise in dem Beispil forhanden sind wiel sowas is imer nur ne grunglage und nicht mehr. Ich stehe halt nur manchmal auf dem Schlach vorallem weil ich heut sehr viel stress hatte und vs.net in der Firma auch noch spint und stendig fehler ferursacht die keine sind du weisst bestimt wie das mach mal ist.
Ich poste auch relativ selten selber Fragen sondern suche mir den Kram zusammen den ich brauch aber zu dem Thema gibt es ja sogut wie nirgens etwas.
Hallo Programmierhans
is echt super aber nenn bisel was stimt noch nicht wies nicht ob es an mir liegt die Backspace tasste geht nicht. Und er schreib dalles hintereinander kanst du mir noch sagen wie ich das umbigen kann?
Hallo Rainbird
were echt super würde das gerne auch mal testen.
Noch ne Frage,
Was soll die Variable ConsoleWindowHandle enthalten beziehungsweise welchen Parameter muss ich da Übergeben?
Danke für die schnelle Hilfe werde beides mal testen.
schade
wies dann fileicht jemand wie ich etws ähniches selber schreiben kann?
erklerst du mir vieleicht auch wie ich es so in meine form intigrire wäre echt net.
edit ich würde es gerne in einem MdiConteiner öffnen
Ja indem fall schon also geht es oder nicht
Hallo,
Gibt es eine Möglichket ein Consolenfenster in eine Form zu intigriren.