installer erstellen oder click once deployment verwenden für beides findest du anleitungen in der msdn oder googlen wird dir auch helfen
ich würde controls in einem form zur laufzeit so erstellen
for each (einträge aus deiner config...
{
control ctrl = new control
this.controls.add(ctrl)
}
das ist natürlich fantasie code und soll dir nur auf ein wenig die sprünge helfen
also wenn ich eine win app deploye egal ob mit click once oder setup projekt
ändere ich nie die standard einstellungen für die speicherorte der dateien.
D.h programm dateien = c:\programme... and user data c:\dokumente und einstellungen\user...
Wir haben bei uns in der firma noch nie probleme damit gehabt da user schreibrechte auf c:\programme beim erstellen des builds bekommen und diese rechte ohnehin für c:\dokumente und einstellungen\user... haben.
schwer zu sagen warum?
aber lass dir doch mal den connection string im release modus in einer msgbox ausgeben, nur um zu prüfen ob dieser ok ist.
Hallo,
ich hoffe ich hab mich für das richtige forum entschieden, dieses schien mir aber am passensten zu sein.
Nun zur eigentlichen frage:
Ich habe zwei Server der erste (beides DELL 19Zoll Racks)
P4 3GHZ
2 GB RAM
der andere
Quad-Core Xeon 4x2.13GHz
4 GB RAM
Auf einen muss eine MySQL 5 DB momentane Größe ca. 8GB
ca 100 Zugriffe die Stunde
Und einer soll als Webserver genutzt werden (IIS)
Momentan mit ca 100 Webforms und ca 75 Zugriffe in der Stunde.
Mir kommt es jetzt in erster Linie auf Performance an.
Welchen Server würdet ihr wofür nehmen?
Bin über jeden Tip dankbar!
probier mal das
if (this.checkBox1.Checked)
{
MessageBox.Show("checked");
}
ps. das checked muss klein (case sensitive)
und das == kannst du dir auch sparen.
hatte auch schon öfter das problem das ich ergebnisse brauchte wo die tabellen teilweise in einer DB2 und teilweise in Mysql waren ich habe das immer so gemacht dass ich die daten zuerst auf eine db gebracht habe und dann dort über joins zum entsprechenden ergebnis gekommen bin, hoffe das hilft dir weiter
kuck dir mal webservices an.
hab das mal in einer webanwendung gemacht
//fill the weeks in the other combobox (for the current year)
int numberOfWeeks = CalendarWeek.GetCalendarWeekCount(DateTime.Today.Year);
for (int week = 1; week <= numberOfWeeks; week++)
{
DropDownListWeeks.Items.Add(week.ToString());
}
//After getting data set selected item to the current week
object indexOfCurrentWeek = DropDownListWeeks.Items.FindByValue(CalendarWeek.currentKW().ToString());
this.DropDownListWeeks.SelectedIndex = Convert.ToInt32(indexOfCurrentWeek.ToString()) - 1;
und hier die klasse mit den entsprechenden methoden
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
using System.Globalization;
/// <summary>
/// Class with several functions for handling
/// calendar week system
/// </summary>
public class CalendarWeek
{
public int Year;
public int Week;
public CalendarWeek(int year, int week)
{
this.Year = year;
this.Week = week;
}
//Algorithm for getting the calender week for a date
public static CalendarWeek GetCalendarWeek2(DateTime date)
{
double f = ((14 - date.Month) / 12);
double a = Math.Floor(f);
double y = date.Year + 4800 - a;
double m = (date.Month) + (12 * a) - 3;
double jd = date.Day + Math.Floor(((153 * m) + 2) / 5) +
(365 * y) + Math.Floor(y / 4) - Math.Floor(y / 100) +
Math.Floor(y / 400) - 32045;
double d4 = (jd + 31741 - (jd % 7)) % 146097 % 36524 %
1461;
double L = Math.Floor(d4 / 1460);
double d1 = ((d4 - L) % 365) + L;
// get calendar week
int calendarWeek = (int)Math.Floor(d1 / 7) + 1;
// get year of the calendar week
int year = date.Year;
if (calendarWeek == 1 && date.Month == 12)
year++;
if (calendarWeek >= 52 && date.Month == 1)
year--;
// return calendarweek
return new CalendarWeek(year, calendarWeek);
}
/// <summary>
/// Method to number of weeks in a year
/// </summary>
/// <param name="year">year for the calendar weeks</param>
/// <returns>int number of calendar weeks</returns>
public static int GetCalendarWeekCount(int year)
{
//Get calendar week for the 31.12 of the year
System.DateTime baseDate = new System.DateTime(year, 12, 31);
CalendarWeek calendarWeek = GetCalendarWeek2(baseDate);
// Wenn dieser Tag in die Woche 1 des neuen Jahres fällt, die Kalenderwoche
// des um eine Woche reduzierten Datums ermitteln
if (calendarWeek.Week == 1)
return GetCalendarWeek2(baseDate.AddDays(-7)).Week;
// return result
return calendarWeek.Week;
}
/// <summary>
/// Get the current week number
/// </summary>
/// <returns>int currentKW the current week</returns>
public static int currentKW()
{
//Initialize gregorian calendar class
GregorianCalendar gregorianCal = new GregorianCalendar();
//Get value for current week
//
//Parameters:
//
//Calendar week rule = 1st week is the week with al least four days in it
//First day of week = monday
return gregorianCal.GetWeekOfYear(DateTime.Today, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
}
}
}
es sollte ja kein problem sein das in einer windows anwendung zu implementieren
DB=MYSQL5
Hi ist es möglich in ein select statement eine spalte einzufügen die mir die record#
ausgibt einzufügen
ich stell mir das ungefähr so vor.
select auto_increment as id . name, vorname ....
Result
1 | Schmidt | hans
2 | Müller | fritz
.....
jemand eine idee?
Also ich speichere alle connectionstring in der xml datei das passwort allerdings verschlüsselt.
wie gesagt plag dich nicht mit vb verweisen rum bau dir das selbst, das hat nur vorteile!
davon mal abgesehen, ich glaube es ist besser sich eben 5minuten hinzusetzen
und ein form mit ner textbox und nem ok und abbrechen button zu bauen
mehr ist das ja nich.
ok vielleicht noch den form text und die überschrift als parameter dazu.
datagridview.allowUserToSortColumns = false;
aber das macht sie doch
CobraAlterCommand = new OleDbCommand("ALTER TABLE addresses ADD COLUMN mesoprim TEXT(50);", CobraConn);
dein dienst wird wahrscheinlich als nutzer SYSTEM ausgeführt oder?
das kannst du im Taskmanager sehen wenn deine db auf einem netzlaufwerk liegt
hat system vielleicht keine schreibrechte?!!??
ließe sich ausschließen wenn du mal eine windwos anwendung zum ausführen verwendest
das versteh ich allerdings auch nicht.
ich würder das ganze jetzt über einen anderen treiben probieren zb odbc.
um zu sehen ob es an der mdb an sich liegt.
das @ ist dafür um escape zeichen in string zu unterdrücken.
richtig sieht der string so aus: (ich hoffe das ich das diesmal fehlerfrei hinkriege 😉
CobraConnStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
Properties.CoWi.Default.CobraDB + @";User Id=admin;Password=;";
sorry vertippt
muss heißen
CobraConnStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
Properties.CoWi.Default.CobraDB + @";User Id=admin;Password=";
probier mal bitte so
Provider=@"Microsoft.Jet.OLEDB.4.0;Data Source=" +
Properties.CoWi.Default.CobraDB + @";User Id=admin;Password=;";
kannst du deinen connectionstring mal posten?
um änderungen an der tabellenstruktür vornehmen zu können muss du meines erachtens eine exclusiv geöffnete verbindung erstellen
Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Exclusive=1;Uid=admin;Pwd=;
hi,
laut meiner preisliste von 06 kostet das teil 1500 euro.
ich hab ne preisliste von intermec bei der arbeit, den preis kann ich dir dann morgen sagen, aber so viel vorweg mit 69 euro wie dem teil was du gezeigt hattest wirst du nicht hinkommen.
ich versteh nicht ganz was du da machst wenn du keine DB als grundlage hast sind doch alle daten nach dem schließen des forms weg??!!
das gerät kenn ich nicht, sieht aus wie ein controller den du irgendwo einbauen kannst
, ich mein guck mal auf den Preis!!.
Aus erfahrung kann ich dir wirklich geräte von intermec emfehlen z.b. den IF4 hat rs232
schnittstelle und keine eigene logik d.h. für den anschluss an einen rechner gedacht und deshalb auch relativ preisgünstig.
PI - wir sind doch alle programmierer oder?
ansonsten
running scared
hard candy
the descent
wilderness
dog soldiers
inside man
fight club
journey to the end of the night
28 days later
in china essen sie hunde
lost highway
mulholland drive
wild at heart
gegen die wand
die fabelhafte welt der amelie
wenn die tags noch nicht beschrieben sind würde ein schreiber(drucker) auch helfen 😁
Im ernst, einfach ausprobieren, ich denke aber das es funktionieren sollte.
Du musst dann natürlich gucken was über com dann letztendlich ankommt dafür bietet sich zum testen wieder hyperterminal an wenn du weißt welche daten sich auf den tags befinden sollten kannst diese hoffentlich im output der comschnittstelle ohne große dokumentation wiederfinden.
Viel spaß
Vielleicht etwas das user controls und threading beinhaltet das fand ich spanned zu verstehen.
Mal angenommen ich liege nicht völlig daneben, kannst du die strings die von den RFID transpondern gelesen werden grob mit den vom EAN128 vergleichen d.h. du hast datenbezeichner und values, selbst wenn du keine db's hast und du weisst welche stellen welche values darstellen z.b. 15 - 21 = typbezeichnung oder so kannst du danach parsen, besser wären datenbezeichner nach denen du suchen kannst um den darauf folgenden value zu finden. Funktionieren wird mit sicherheit beides.
Angenommen es werden die daten verschlüsselt (was meistens nicht der fall ist)
gehe ich mal davon aus das dir der schlüssel dann bekannt sein wird, irgendjemand muss die dinger ja schließlich auch beschreiben und ich gehe mal davon aus das ihr das macht.
bietet es sich nicht an einen dienst zu schreiben der auf dem rechner an dem der leser angeschlossen ist laufen zu lassen der permanent die daten vom com port ließt (wie hyperterminal) und sie dann parst und in eine db schreibt?
warum weist du dem command.commandtext den zuerst eine select anweisung zu?
Erstmal dank für die antworten
Wie schon fast vermutet lag der fehler zwischen den kopfhörern.
in einem form lag im designer ein performance couter der als machine name
meinen entwicklungsrechner gesetzt hatte, den muss ich irgendwann mal mit der toolbox draufgezogen haben, habe ich komplett übersehen.
als user kann man natürlich nicht mit \machinename auf andere rechner im netz zugreifen.
Trotzdem hätte ich mir an irgendeiner stelle eine aussagekräftige Fehlermeldung gewünscht.
Ich hab mir das ganze mal mit dem process Explorer angesehen, aber nichts enddeckt was problem machen sollte, auch alle ordner hat der standard benutzer mindenstens leserechte.
Programm hat ein Problem festgestellt und muss beendet werden.
Informieren Sie Microsoft uber dieses Problen
....
zwei button : Fehlerberichterstattung senden | Nicht berichten
an Talla:
es passiert nichts auf netzwerkordnern oder ähn.
ich schätze das der zugriff auf eine der programm komponenten nicht
erlaubt ist sie möglicherweise in einem ordner liegt auf den der user keinen zugriff hat.
Aber die frage ist warum sollte das so sein?!
die installation funktioniert wunderbar
die anwendung auch, solange der angemeldete user admin ist.
Hallo,
wie schon gesagt ich habe eine windows anwendung für die ich eine setup routine erstellt habe. wenn ich diese auf einem client installiere und dieser local admin rechte hat läuft die anwendung wunderbar, wenn nicht, dann nicht.
Ich bekomme auch keine fehlermeldung, sonder nur dieses fenster das probleme aufgetreten sind und ob der problembericht an microsoft gesendet werden soll.
Ich mache das nicht zum erstenmal und hatte nie probleme, der einzige underschied ist
das ich eine dll eingebunden habe welche mit .net enwickelt wurde.
Jemand eine idee???
Das funktioniert wie mit jedem anderen connector auch.
Du must vorher nur den Verweis zu "IBM DB2 UDB fir iSeries .NET Provider" hinzufügen.
dann kannst du so:
string connectionString = "deinConnectionString";
IBM.Data.DB2.iSeries.iDB2Connection con = new IBM.Data.DB2.iSeries.iDB2Connection(connectionstring);
con.Open();
die verbindung öffnen
über iDB2Command kannst du dann deinen command text angeben usw.
standard halt . Da wird dir google helfen.
Hi,
ich arbeite auch viel mit iSeries und den zugriff auf die datenbank (DB2)
kannst du am besten mit dem mitgelieferten db2 connector reailisieren
ist aber auch z.b. per odbc möglich du kannst auch den iseries access client
emulator mit der pcshell32.dll fernsteuern d.h. per remote commands bedienen.
ich versteh zwar nicht ganz was du meinst
aber klassischer weiser würder man doch
eine tabelle anlegen mit
typ id | typ bezeichnung
und dann nur noch den typ angeben
und die bezeichung über einen join beziehen.
Ich weiss zwar nicht um was für daten es sich handelt
aber ich benutze zum verschlüsseln von passwörtern im
die folgende class die dann nur mit dem entsprechenden
key wieder zu entschlüsseln ist.
der nachteil: ich weiss nicht ob dir das proffessionell genug ist.
der vorteil: es ist datenbank unabhängig, da das ver und ent-schlüsseln vorher stattfindet.
hier die klasse:
using System;
using System.Collections.Generic;
using System.Text;
namespace OOP2
{
//=============================
//This Class is used for
//crypting and decrypting
//Passwords by using the
//Key: dein key
//=============================
class CryptAndDecrypt
{
#region Class variables
private string key;
#endregion
#region Properties
public string Key
{
get { return key; }
}
public CryptAndDecrypt(string cle)
{
key = cle;
}
#endregion
#region encryption
/// <summary>
/// Encrypts string
/// </summary>
/// <param name="ChaineaEncoder">uncrypted String to crypt</param>
/// <returns>crypted string</returns>
public string Encrypt(string ChaineaEncoder)
{
string encrypt = null;
for (int i = 0; i < ChaineaEncoder.Length; i++)
{
encrypt += Convert.ToString(Convert.ToChar((Convert.ToInt16(key[i % key.Length]) + Convert.ToInt16(ChaineaEncoder[i])) % 65536));
}
return encrypt;
}
#endregion
#region decryption
/// <summary>
/// Decrypts string
/// </summary>
/// <param name="ChaineaDecrypter">crypted string to decrypt</param>
/// <returns>uncrypted string</returns>
public string Decrypt(string ChaineaDecrypter)
{
string decrypt = null;
for (int i = 0; i < ChaineaDecrypter.Length; i++)
{
decrypt += Convert.ToString(Convert.ToChar(((Convert.ToInt16(ChaineaDecrypter[i]) - Convert.ToInt16(key[i % key.Length])) % 65536)));
}
return decrypt;
}
#endregion
}
}
aha, alles klar danke für die antwort.
dann werde ich wenn ich eine frage habe demnächst darauf achten das ich den thread nach erhalt einer lösung als gelöst markiere
Frage an den Moderator.
Wann werden hier threads eigendlich mal geschlossen oder als gelöst geflagt. Würde vielleicht bei der suche nach antworten in vorhandenen threads helfen wenn man sieht ob eine lösung für ein problem gefunden wurde.
Wenn du was im grid änderst werden die data im datatable aktualisiert sprich was auch immer im grid steht steht auch im datatable, um die daten zurück in die datenbank zu schreiben musst du nur das datatable an eine funtion übergeben die mit hilfe des command builders ein update macht.
Wenn ich das für eine mysql tabelle mach sieht das ungefähr so aus.
/// <summary>
/// Updates the datatable to MySQL
/// </summary>
/// <param name="dt">datatable to update to mySQL file oop2_forecast</param>
public void updateForeCastToMysql(DataTable dt)
{
//set successflag to false
MethodSuccess = false;
//initialize odbc helper stuff & and get connectionstring from config file
Odbc odbc = new Odbc();
odbc.getConnectionstringMYSQL();
//needed to make it look like thats this is the source of the data
string commandText = @" SELECT
Resource,
Date,
QtyInKg,
QtyInStdUm,
StdUm,
Description,
Class,
Subclass,
PmType,
PmName,
WfCode,
FcDatePrism,
FcType
FROM
oop2_forecast";
//Initialize new odbc components
OdbcConnection odbcConnection = new OdbcConnection(odbc.connectionStringMYSQL);
OdbcCommand odbcCommand = new OdbcCommand(commandText, odbcConnection);
OdbcDataAdapter odbcAdapter = new OdbcDataAdapter(odbcCommand);
OdbcCommandBuilder commandBuilder = new OdbcCommandBuilder(odbcAdapter);
//Rows Status added
odbcAdapter.AcceptChangesDuringFill = false;
//Open connection
try
{
odbcConnection.Open();
}
catch (Exception openEx)
{
MessageBox.Show(openEx.Message.ToString());
return;
}
//Data update
try
{
odbcAdapter.Update(dt);
}
catch (Exception updateEx)
{
MessageBox.Show(updateEx.Message.ToString());
return;
}
finally
{
odbcConnection.Close();
}
//Set method succes to true
MethodSuccess = true;
return;
}
hast du mal SmartNavigation = true; probiert?
was ist denn der rückgabewert deiner funktion?
vielleicht mal so probieren:
string myValue = SetPersNr("+id+").ToString();
string Scriptfkt = "<script type=\"text/JavaScript\">myValue</script>";
ClientScript.RegisterClientScriptBlock(this.GetType(), "", Scriptfkt);
Hi,
ich bisher javascript nur für clientseitige messageboxen verwendet
das mache ich so.
ScriptMsg = "<script type=\"text/JavaScript\">\n" +
"window.alert('Connection open Error ' " + openExeption.Message + "');\n" +
"</script>\n";
ClientScript.RegisterClientScriptBlock(this.GetType(), "", ScriptMsg);
vielleicht hilft dir das ja schon weiter.