Laden...

Forenbeiträge von trashkid2000 Ingesamt 156 Beiträge

15.04.2011 - 14:31 Uhr

Hallo,

Regex rgx1 = new Regex("&");
Regex rgx2 = new Regex("%");
Regex rgx3 = new Regex(P_Name_List.SelectedItem.ToString());

also wirklich nichts gegen die Verwendung von regulären Ausdrücken, aber für Ausdrücke bzw. strings, die keine regulären Ausdrücke sind, ist das erstens Overhead und total falsch angewendet.

string[] substrings = rgx1.Split(input);

kann man z.B. ganz leicht durch das ersetzen:

string[] substrings = input.Split(new char[] {'&'});

Marko

08.04.2011 - 09:27 Uhr

Naja, wenn Du manuell die Daten korrekt in die Spalte in der Datenbank speichern kannst, dann kann es ja nicht an der Tabelle oder der Datenbank liegen.

Eine Holzhammermethode: Erstelle doch einfach mal das DataSet (bzw. die besagte DataTable + TableAdapter) neu. Und dann schaue, ob sich der Fehler damit erledigt hat.

07.04.2011 - 21:16 Uhr

Hallo,
so richtig verstehe ich das Problem bzw. die Fragestellung nicht.
Also, es gibt 2 Möglichkeiten, sich an einem SQL-Server anzumelden:
1.) per Trusted Security -> Credentials des am Windows-System angemeldeten Benutzers
2.) per Username/ Password (SQL-Login)

Um beide Login-Arten nutzen zu können, muss im Server der Mixed-Mode aktiviert sein.
Ein ConnectionString von


Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;User ID=MyDomain\MyUser;Password=myPassword;

ist total sinnlos, da dabei Trusted Security aktiviert ist und so der Benutzername sowie Passwort ignoriert wird.

Also auf deutsch:
Entweder Du hast eine Gruppe, in der die Benutzer drin sind, und dazu halt einen Login für die Gruppe auf dem SQL-Server (inklusive Benutzer auf die Datenbank). Aber was meinst Du mit "nicht registrieren Login"? Ich meine, entweder kann ich mich an der Domäne anmelden, oder ich bin Gast(?). Als Gast würde ich sowieso keinen Zugriff gewähren.

Oder Du hast für jeden Benutzer, der Zugriff auf den Server (und die Datenbank) haben soll, einen extra Login. Oder halt einen Login, von den Benutzername/ Passwort bekannt ist.

Aber: wenn schon eine Domäne vorhanden ist, dann würde ich gänzlich auf SQl-Logins verzichten und auf die Sicherheit der Domäne aufbauen. Mit Gruppen dann.
LG, Marko

07.04.2011 - 13:24 Uhr

Hallo, schaue mal beim DataSet in die xsd rein. Also öffne sie mal mit dem Xml-Editor.
Und dann gucke mal bei dem InsertCommand des TableAdapters, was bei dem Parameter, wo die Längenbeschränkung auftritt, für eine Size steht.


Direction="Input" ParameterName="@Loginname" Precision="0" ProviderType="NVarChar" Scale="0" Size="0"

Wenn ich dort als Size eine Größe von 3 angebe, so kommen auch nur 3 Zeichen in der Datenbank an. 0 ist unbeschränkt.
LG, Marko

04.04.2011 - 19:33 Uhr

Hallo,
also erstmal kann ich Dir auch nicht sagen, wo denn der Fehler liegt. Aber:

1.) Warum benutzt Du bei SqlCompact OleDb?? Es gibt dafür spezielle Klassen, wie z.B. SqlCeConnection, SqlCeCommand...

2.) Bei dem zusammengesetzten string sieht wirklich kein Ar*** durcht. Gewöhne Dir mal ganz schnell an, so eine Abfrage per Parameter zu machen!! Ist erstens sicher und erleicherter auch die Lesbarkeit.

3.) Eine Prozedur, die Daten liest "Connection" zu nennen, ist auch nicht besser. Benenne Prozeduren nach dem, was sie machen.
Tut mir leid, dass ich so viel zu bemängeln habe. Aber denke, dass so ein Forum auch dazu da ist, Verbesserungen zu nennen.
Marko

01.04.2011 - 20:43 Uhr

Hallo,
ein weiter Weg wäre, dass Du die zu der Row, die das betrifft, im DataSet eine partielle Klasse anlegst und dort eine bool-Property implementierst. Und diese gibt dann also "geparst" die andere Property zurück oder setzt diese als string-Wert.
So kannst Du den Datentyp in der Table belassen, musst nichts an dem Selct-Statement ändern und hast auch kein Stress beim evtl. speichern. Dies würde dann so in etwa aussehen:


public partial class DataSet1 
{
   public partial class Table1Row
   {
      public bool BoolProperty
      {
         get { return StringProperty.Equals("0") ? false : true; }
         set { StringProperty = value ? "1" : "0"; }
      }
   }
}

Aber das ist eigentlich nur eine Notlösung, denn in der Datenbank kann allse möglich als String stehen. Und wenn das dann auch noch DBNull annehmen soll, wird das noch spaßiger.
LG, Marko

29.03.2011 - 21:28 Uhr

Hi,
gerne geschehen. Schön, dass es nun klappt. Fand ich auch mal ganz interessant.
Und vielleicht hilft es ja noch ein paar anderen, die das gleiche Problem haben. Aber warum die wsdl so fehlerhaft ist, ist mir auch echt ein Rätsel!?
Nun gut, viel Erfolg,
Marko

29.03.2011 - 20:58 Uhr

Hallo,
also habe den Code mal bei mir getestet, und es ist kein Fehler aufgetreten (mail ist auch angekommen)
Provider: gmx, Credentials: meinen mailadresse als Loginname und mein Passwort

Was Du mal testen kannst: setze mal die Eigenschaft "UseDefaultCredentials" des SMTPClient auf false, bevor Du die Credentials setzt. Das dürfte passen. Ansonsten schaue Dir genau an, welche Anmeldeinformationen aus der ini gelesen und verwendet werden.
Marko

29.03.2011 - 19:35 Uhr

Hallo,
also warum das so auftritt kann ich auch nicht sagen.
Aber wenn Du den Inhalt ersetzen willst, wäre das ein Weg:


node.ReplaceWith(xmlContent);

LG, Marko

29.03.2011 - 14:29 Uhr

Hi,
aber der Speicher wird doch nicht vom TableAdapter verbraucht, sondern eher von den Daten, die Du über dem TableAdapter in das DataSet geladen hast. Also musst Du eher besser handeln, welche Daten in das DataSet geladen werden.
Und wenn diese nicht mehr benötigt werden, so können diese wieder aus dem DataSet entfernt werden, wodurch Speicher freigeräumt wird.
LG

28.03.2011 - 19:41 Uhr

Hallo,
ja, das Problem ist, dass es eine Menge Fehler in der wsdl gibt. Ein paar Namespaces die fehlen, und die soap:operations, die gänzlich fehlen, machen das importieren der wsdl unmöglich bzw. sehr schwer.
Habe mich mal daran gemacht, das Ganze zu fixen (ja, ich habe manchmal zu viel Langeweile).
Die geänderte WSDL befindet sich unten als Dateianhang. Vergleiche mal beide Definitionen, und Du weißt, was ich hinzugefügt habe. Jedenfalls funktioniert es nun. Du kannst die Datei lokal speichern (Endung in .wsdl ändern, da hier nur txt als Anhang möglichist), und dann bei Visual Studio bei dem Dialog, der beim Hinzufügen einer ServiceReferenz kommt, den lokalen Speicherort + Dateiname angeben.
Wenn nun also die Proxyklasse erstellt wurde, ist die Verwendung wie folgt:


TyreShoppingWebServicePortTypeClient client = new TyreShoppingWebServicePortTypeClient();
var token = client.authenticate(new authenticate() { userId = "123", password = "pass" });

Habe auf jeden Fall schonmal einen "Authentication Error" hinbekommen, da ich halt keine Zugangsdaten habe. Aber das bedeutet jedenfalls, dass es funzt.
Ansonsten ist die Verwendung echt schlimm, wie ich feststellen muss. Aber da kann man nichts dran ändern... Also könnte man schon, aber man mus es ja nicht übertreiben!
Viel Spaß damit, Marko

//edit: WSDL hier als Anhang hochgeladen

27.03.2011 - 10:48 Uhr

Hallo,
denke, dass Du das suchst:


var internet = from e in xmldoc.Descendants("Internet").Elements("Item")
select new
{
   attributes = e.Attributes()
};

LG, Marko

25.03.2011 - 08:02 Uhr

Hallo,
bloß mal als kurze Anmerkung:


DtSet.Tables[0]    //ruft die erste Tabelle im DataSet ab (Index 0)
DtSet.Tables["0"]  //ruft dieTabelle mit dem Namen "0" ab
DtSet.0            //ruft die Tabelle "0" über die Property ab (wenn es denn ein typisiertes DataSet ist)

Warum Du noch ein object[] erstellst habe ich nicht verstanden, denn das ItemArray der Row ist doch schon eins.
LG

24.03.2011 - 19:17 Uhr

INNER JOIN Angebot AS a on a.KID = k.KID
INNER JOIN Rechnunung AS r r.AAID = r.AAID

Was soll das bewirken? Das müsste doch so aussehen:

INNER JOIN Rechnunung AS r ON k.??? = r.AAID

LG

21.03.2011 - 19:59 Uhr

Hallo,
hier der Code von der fehlenden Seite:


public static DateTime? GetCreationDate(BitmapSource bitmapSource)
{
   // Ermitteln, ob Metadaten vorhanden sind
   if (bitmapSource.Metadata != null)
   {
      // Ermitteln, ob die Metadaten vom Typ BitmapMetadata sind
      // (die einzige zurzeit von ImageMetadata abgeleitete Klasse)
      BitmapMetadata bitmapMetadata = bitmapSource.Metadata as BitmapMetadata;
      if (bitmapMetadata != null)
      {
         if (bitmapMetadata.DateTaken != null)
         {
            // Versuch, das Datum mit der aktuellen Kultur zu konvertieren
            DateTime result;
            if (DateTime.TryParse(bitmapMetadata.DateTaken, out result))
            {
               return result;
            }
            else
           {
              throw new FormatException("Der String '" + bitmapMetadata.DateTaken +
"' kann nicht in einen DateTime-Wert " +
"konvertiert werden");
            }
         }
      }
   }
}

//edit: und hier noch ein Link dazu:
http://snipplr.com/view/25074/date-taken-exif-data-for-a-picture/
LG, Marko

21.03.2011 - 13:23 Uhr

Hallo,
habe gerade gelesen, dass Du das mit der BodyFormat-Property setzen kannst:


Outlook.MailItem item = ...;
item.BodyFormat = Outlook.OlBodyFormat.olFormatPlain;

LG, Marko

17.03.2011 - 20:54 Uhr

Hallo,
kann es sein, dass Du ein paar Zeichen vergessen hast (komm nicht drauf, wie die "`"-Zeichen heißen)?
Bei meinen Test hat es jedenfalls so funktioniert:


SELECT * FROM `finanzen__(€uro)`;

LG, Marko

17.03.2011 - 13:43 Uhr

Hallo,
also habe das mal getestet.
Bist Du Dir sicher, dass Du der Methode das richtige Passwort zum entschlüsseln übergeben hast? Denn bei einem falschen Passwort kommt auch die von Dir genannte Exception.
Marko

15.03.2011 - 22:30 Uhr

Hallo,
erstmal hatte ich große Mühe zu verstehen, was Du überhaupt machst bzw. erreichen willst. Die oben gezeigte XML ist der Inhalt von "queryResult", oder? War nicht so ersichtlich. Und die Erzeugung des XDocuments war für mich auch nicht so ganz ersichtlich. Aber okay Du benötigst es für die NameTable. Ob es da eine elegantere Lösung gibt kann ich im Moment nicht sagen.

Aber das Problem, weshalb der singleNode null bleibt, ist wie so oft die Verwendung der NameSpaces in der XML. Das mit Deinem NamespaceManager haut so nicht hin. Du musst schon die Namespaces so angeben, wie sie in der XML stehen. Also so:


XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("rs", "urn:schemas-microsoft-com:rowset");
nsmgr.AddNamespace("z", "#RowsetSchema");

Und dann klappte s auch mit der folgenden Abfrage:


XmlNode singleNode  = doc.SelectSingleNode("/rs:data/z:row", nsmgr);
DataSet ds = new DataSet();
ds.ReadXml(new XmlNodeReader(singleNode));
foreach (var row in ds.Tables["row"].Rows)
{ }

Anmerkung1: wäre es nicht vielleicht besser, wenn Du den gesamten Inhalt von "queryResult" in das DataSet einliest? Dann kannst Du immer noch die erste Column abfragen, aber Dir gehen keine Informationen verloren.
Anmerkung2: Das DataSet, das erstellt wird, ist nicht typisiert. Du solltest Dir vielleicht vorher ein DataSet erstellen, das der Struktur der XML entspricht und das Du dann füllst. Das macht das Ganze erstens sicherer und auch einfacher für Abfragen.

//edit: warum fängst Du SoapExceptions ab? An welcher Stelle dieses Codes könnten diese auftreten? Das Einzigste, was meiner Meinung nach in dem Code auftreten könnte wäre eine XmlException

LG, Marko

14.03.2011 - 15:28 Uhr

Hallo,

in etwa so:


foreach (var node in doc.Root.DescendantNodes().ToArray())
{  
    node.ReplaceWith(new XComment(node.ToString()));
}

LG, Marko

08.03.2011 - 16:15 Uhr

Na so?


result.Name = Encoding.UTF8.GetString(Encoding.GetEncoding("iso-8859-1").GetBytes(reader["street"].ToString()));

08.03.2011 - 15:40 Uhr

Naja, das gilt halt, wie man schon am Namen der Seite sieht, für MySql.
Aber Du hast Doch MSSql, oder. Und da wird das Ganze nicht klappen.

Also wenn Du Die Datenbank nicht irgendwie umstellen kannst, dann bleibt Dir wohl beim Abfragen der Daten eine manuelle Konvertiertung nach UTF-8


str = Encoding.UTF8.GetString(Encoding.GetEncoding("iso-8859-1").GetBytes(str));

und vor eventuellem speichern wieder zurück.
LG, Marko

04.03.2011 - 11:16 Uhr

Hallo Mini,

also das Problem ist, dass Du in dem Projekt, in dem Du auf die Entitäten nicht die Referenz auf System.Data.Entity eingebunden hast. Aber das zeigt dir Visual Studio auch in der Fehlermeldung an.

Also, Du musst einfach in allen Projekten, in den Du auf die Entitäten zugreifen willst, die dll einbinden. Oder zwischendurch noch mappen.
LG, Marko

01.03.2011 - 22:25 Uhr

Hallo,
also zu dem Problem mit 32 Bit und 64 Bit kann ich leider nichts sagen. Genauso wenig habe ich Deinen Code zum laufen bekommen. Obwohl ich die Interop eingebunden habe. Keine Ahnung, was man da noch einstellen muss.
Aber Du hast ja auch gefragt, wie Du den Code auf OleDb umstellen könntest. Also habe ich mal aus Langeweile was gemacht:


string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\mdb\\DB.mdb";
using (OleDbConnection conn = new OleDbConnection(connStr))
{
   conn.Open(); 
   IEnumerable<DataRow> rows = conn.GetSchema("Tables").Rows.OfType<DataRow>();
   bool exists = rows.Any(row => row["TABLE_NAME"].ToString().Equals("Adressen"));
   if (!exists)
   {
      string connStr2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\mdb\\BackEnd.mdb";
      using (OleDbConnection conn2 = new OleDbConnection(connStr2))
      {
         conn2.Open();
         IEnumerable<DataRow> rows2 = conn2.GetSchema("Tables").Rows.OfType<DataRow>();
         foreach (DataRow row in rows2)
         {
            if (!rows.Any(dr => dr["TABLE_NAME"].ToString().Equals(row["TABLE_NAME"].ToString())))
            {
                //so, nun sind hier alle rows drin (also eigentlich Tabellen), die in der DB nicht existieren
                //was soll nun mit denen gemacht werden??     
            }
         }
      }
   }
}

Aus Deinen Code ist nicht so ersichtlic (oder ich verstehe es einfach nicht), was Du mit den Tabellen machst, die in der Backend existieren, aber nicht in der DB. Kopierst Du nur das Schema oder auch die Daten darin?
LG, Marko

28.02.2011 - 18:34 Uhr

Hallo,
also ohne nun genau zu wissen, warum der Fehler auftritt.
Aber für mich stellt sich die Frage, warum Du über COM auf die Access-DB zugreifst (ich hasse COM und nutze es nur, wenn es gar nicht anders geht). Warum gehst Du nicht über die OleDbConnection-Klasse? Vielleicht wäre das ja einfach eine Option, wenn es nicht mit zu viel Arbeit verbunden ist...
LG, Marko

27.02.2011 - 20:14 Uhr

Hallo,

Habe eben schonmal Tessnet2 ausprobiert - das funktioniert aber nicht ganz so wie ich es möchte. Was genau hat denn da nicht funktioniert, wie Du es gewünscht hättest?
Ich habe auch mal mit Tesseract rumgespielt und bin zu der Erkenntniss gekommen, dass der Wrapper, den es für C# gibt nicht wirklich gut funktioniert. Zumal er noch auf Version 2.x basiert, und nun schon Version 3.x draussen ist.
Wenn Du Tesseract in Deinem Programm benutzen willst wird Dir wohl nicht viel übrig bleiben, als das Parsen als extra Process zu starten und dann das Ergebnis einzulesen...

Über andere OCR- Bibliotheken kann ich leider nichts sagen.
LG, Marko

25.02.2011 - 07:19 Uhr

Hi,
also ein Byte-Array kann man doch eigentlich gar nicht in einer Xml verschicken, soweit ich weiß. Dort ist es dann ein Base64-codierter string.
Also müsstest Du auch einen Base64-string vom Webservice erhalten, den Du dann umwandeln musst.
LG, Marko

24.02.2011 - 20:24 Uhr

Hi,
auf was willst Du denn Deine Abfrage ausführen? Das ist ja hier die große Frage.
Wenn Du die Abfrage auf eine DataTable im DataSet machen willst, hast Du doch mit LinQ alle nötige Funktionalitäten gegeben, und wenn Du nicht erst Tables füllen willst, sondern direkt die Abfrage an den SQl-Server richten willst, kannst Du auch bei einem TableAdapter eine SQL-Abfrage hinzufügen.

Also so wirklich verstehe ich das Problem echt nicht... aber dazu müsste man echt mehr von der eigentlichen Implementierung wissen.
LG, Marko

24.02.2011 - 07:44 Uhr

Hallo Beccy!

Ich habe eine Abfrage geschrieben die alle Spalten kontrolliert und das Ergebnis in eine neue Tabelle in Access schreibt. Wozu denn das? Das ist ziemlich sinnlos und bringt Dich in Deinem Fall auch nicht weiter. Denn ob Du nun aus der neuen Tabelle die Daten abfragst oder aus der Originaltablelle ist doch egal.

Also, wenn Du Deine Abfrage an die Access-Datenbank schickst, bekommst Du ein Resultat zurück. Und das kannst Du doch einfach per DataReader durchgehen, daraus eine Liste erstellen und sie dann halt irgendwo anzeigen lassen.

Dazu wäre es natürlich sehr sinnig, dass Du in dem Command nicht nur die Id des Datensatzes abfragst, sondern alle Spalten, die Du denn benötigst.
LG, Marko

21.02.2011 - 20:50 Uhr

Hallo,
sorry, aber Deine String-Verkettung hat gar nichts mit einer parametrisierten Abfrage zu tun. Das müsste dann schon so aussehen:


OleDbCommand cmd = new OleDbCommand("SELECT ID FROM Datei WHERE Dateiname LIKE ? AND Erstelldatum = ?;", conn);
cmd.Parameters.AddWithValue("@Dateiname", SuchFeld.Dateiname);
cmd.Parameters.AddWithValue("@Erstelldatum", SuchFeld.Erstelldatum);

Beachte aber dabei, dass der Dateiname nur gefunden wird, wenn der Dateiname exakt gefunden wird (ansonsten müsstest Du dies machen:)


cmd.Parameters.AddWithValue("@Dateiname", "%" + SuchFeld.Dateiname + "%");

Und mit dem Datum: Ich denke, dass nur eine Datei gefunden wird, wo das Datum und die Zeit ( sekundengenau?) passt. Also Vorsicht.
Wo möchtest Du die Ergebnisse anzeigen lassen?
LG, Marko

18.02.2011 - 20:40 Uhr

Hi,
was meinst Du denn damit, die Dateien direkt anzeigen zu lassen? Die Symbole, die Du auch im Explorer siehst? Klar kannst Du auch Symbole anzeigen lassen. Aber welches Symbol für welche Dateiendung, das musst Du wohl selber implementieren.

Zu Deinem Screenshot: Es macht keinen Sinn, den Username oben unkenntlich zu machen, wenn man ihn bei dem ausgewählten Eintrag eh lesen kann. Nur mal so als Tip.
Marko

17.02.2011 - 20:15 Uhr

Hallo,
zu 1.)
Also Du musst bei beiden Elementen den Namespace angeben, also so:


XNamespace _3dxml = "{http://www.3ds.com/xsd/3DXML}";
XDocument doc = XDocument.Load(path);
XElement element = doc.Root.Element(string.Format("{0}ProductStructure", _3dxml)).Element(string.Format("{0}ReferenceRep", _3dxml));

Oder auch so, wenn der Name wirklich eindeutig ist:


var elements = doc.Descendants(string.Format("{0}ReferenceRep", _3dxml));

Aber natürlich solltest Du bei der ersten Version natürlich immer erstmal prüfen, ob ein Element null ist!
zu 2.) Naja, da der Wert in dem Attribut nunmal so aussieht, kannst Du da wohl nur was mit Stringoperationen oder auch mit 'ner Regex machen.
LG, Marko

15.02.2011 - 17:12 Uhr

Hallo, Du könntest Dir ja dafür auch eine Methode schreiben.


public void StartThread(int i, string s)
{ 
   Thread th = new Thread(delegate()
   {
       //Do something with i and s
   });
   th.Start();
}

LG, Marko

14.02.2011 - 07:07 Uhr

Nein, daran dürfte es nicht liegen.
Hast Du denn mal versucht, die Datenbank exklusiv für Dein Programm zu öffnen? Also den Mode im ConnectionString mit zu übergeben.
Tritt der Fehler dann immer noch auf?

13.02.2011 - 10:14 Uhr

Hallo, also das sieht ja ganz danach aus, als ob die Datei in der Zwischenzeit gesterrt wurde. Also z.B. durch einen anderen Benutzer, der die Datenbank geöffnet hat. Die gleiche Fehlermeldung kommt nämlich auch, wenn die Datenbank von der Anwendung gesperrt wird, also
Mode=Share Exclusive, und dann versucht wird, die Datenbank mit Access zu öffnen.

Arbeiten mehrere Personen bzw. Applikationen mit der Datenbank? Ansonsten könntest Du sie ja wirklich Exclusiv für Dich öffnen.
LG, Marko

10.02.2011 - 07:05 Uhr

Hi,
habe auch mal eine Zeit lang mit SQL Compact rumgespielt.
Ja, das Management Studio unterstützt die Compact, aber nur im gewissen Umfang. Wenn Du mehr Komfort bei der Arbeit haben willst, kann ich Dir das Plugin "ExportSqlCe" von CodePlex für's Management Studio 2008 empfehlen:
http://exportsqlce.codeplex.com
Ist auf jeden Fall eine Erleichterung. Vorrausgesetzt, dass sich das Management-Studio mal installieren lässt.
LG, Marko

04.02.2011 - 07:08 Uhr

Hallo,
Du redest vom Entity Framework, oder? Konnte mir nichts unter Microsoft Entity vorstellen.

Wenn Du die Relationen in der Datenbank erstellt hast (und diese sollten auf jeden Fall dort erstellt werden) und die Tabellen als Entitäten ins Modell übernimmst werden die Relationen zwischen den Tabellen automatisch vom Framework abgebildet.

Mit den Bildern: Ich würde wahrscheinlich das Bild nicht als Blob in der DB speichern, sondern nur den Link zu dem Bild. Es könnte sonst einfach mal lange dauern, das Bild zu speichern oder zu laden und wieder in ein Bild umzuwandeln.
LG, Marko

31.01.2011 - 18:58 Uhr

Hallo, also das Auslesen des Schemas einer Tabelle ist nicht der Hit:
http://www.java2s.com/Code/CSharp/Database-ADO.net/GettableSchema.htm
Aber wie Du mit den Informationen die Tabelle im SqlCe erstellst ist das andere Problem. Wenn es nur eine einmalige Aktion ist, so würde ich Dir das Management-Studio empfehlen, da kannst Du Dir dann einfach das Create-Script der Tabele erzeugen lassen und dieses dann auf die SqlCe-Datenbank jagen. Oder eine andere Möglichkeit wäre noch die Verwendung Server Management Objects ((SMO). Aber damit habe ich keine Erfahrung, ich weiss nur, dass man damit 'ne ganze Menge programmtechnisch machen kann.
Marko

29.01.2011 - 17:16 Uhr

Hallo,
habe mal geschaut und diese Seite zu dem Thema gefunden:
How to make TracExplorer work with Vs 2010 Beta2
Ob es funktioniert konnte ich leider nicht testen, da ich kein VS2010 besitze.
LG

29.01.2011 - 16:43 Uhr

Hallo,

das InsertOnSubmit für den neuen files-Datensatz kannst Du Dir sparen, da er automatisch angelegt wird, wenn er noch nicht existiert
Ja, aber nur wenn der Code so funktionieren würde. Hatte den Code vorher natürlich getestet, bei mir hat es alles wunderbar funktioniert. Und mit dem SQL-Profiler konnte ich auch genau sehen, wie dabei vorgegangen wird.
Und wie die NullReferenceException auftritt ist mir auch unklar. Denn wenn ich mir das set/get von "files" im generierten Code anschaue bzw. debugge, wird das null schon genau beachtet, bzw. es wird auch beim setzen auf einen anderen Wert mal übergangsweise auf null gesetzt.


[Association(Name="files_modules", Storage="_files", ThisKey="file_id", OtherKey="id", IsForeignKey=true)]
public files files
{
   get
   {
      return this._files.Entity;
   }
   set
   {
      files previousValue = this._files.Entity;
      if (((previousValue != value) || (this._files.HasLoadedOrAssignedValue == false)))
      {
         this.SendPropertyChanging();
         if ((previousValue != null))
         {
            this._files.Entity = null;
            previousValue.modules.Remove(this);
         }
         this._files.Entity = value;
         if ((value != null))
         {
            value.modules.Add(this);
            this._file_id = value.id;
         }
         else
         {
            this._file_id = default(Nullable<int>);
         }
         this.SendPropertyChanged("files");
      }
   }
}

Der Workaround sieht wirklich nicht so sehr schön aus. Kannst Du mal probieren, Dir die Linq-To-Sql-Klassen nochmal neu erzeugen lassen? Aber was dort umgestellt worden sein könnte, weiß ich auch nicht ganz
LG, Marko

29.01.2011 - 12:23 Uhr

Ich bin mal so frei.


string input = "ABCL123";
input = Regex.Replace(input, @"^(.{3}).(\d{3})$", "$1R$2");

Also, ich habe aus den 3 Zeichen vor und nach dem "L" Gruppen gemacht. Diese werden beim replacen dann wieder verwendet.
LG

29.01.2011 - 09:20 Uhr

Hallo,
ist ja ein komisches Verhalten. Hast Du denn irgendwas in dem generierten Sachen geändert? Denn die Id's sind ja vom Server generiert. Also, wenn Du ein neuen "files"-Datensatz erzeugst bekommt er erstmal die Id 0. Beim Speichern in der Datenbank wird dann die generierte Id abgefragt, und dann ein Update gefahren.

Warum heißt es denn bei Dir überhaupt "resources_files". Eigentlich doch nur "files". Ach ja, und das InsertOnSubmit für den neuen files-Datensatz kannst Du Dir sparen, da er automatisch angelegt wird, wenn er noch nicht existiert.


var module = ctx.modules.FirstOrDefault(m => m.id == 2);
if (module != null)
{
   files f = new files() { fileName = "Filename" };
   module.files = f;
   ctx.SubmitChanges();
}

LG, Marko

25.01.2011 - 20:00 Uhr

Hallo,
also mal ganz langsam...
Du machst in der Form1_Load sowas:


...
conn.Open(); // Öffnet die Verbindung
conn = new MySqlConnection(); //Instanziierung 
string constr = "Server=localhost;Database=restaurant;Uid=root;Pwd="; // Server- u. Userdaten
conn.ConnectionString = constr;

Ich denke, da liegt der Fehler. Denn

    1. Du öffnest erst die Verbindung (ohne einen Connectionstring und Username/ Password)
    1. dann instanziierst Du einen neue Connection
    1. setzt dann den Connectionstring
    1. sagst dann irgendwo wieder conn.Open();
      Also, wenn Du die Anwendung debuggst, müsstest Du an Punkt 1 scheitern...
      Marko
23.01.2011 - 13:04 Uhr

Hallo,

lass mal bei SelectSingleNode das "//" weg, dann funtzt es schon


string displayName = item.SelectSingleNode("displayname").InnerText.Trim();
string listName = item.SelectSingleNode("listname").InnerText.Trim();

Aber die Verwendung einer ArrayList finde ich hier wirklich sehr suboptimal. Vor allen Dingen, warum erbst Du davon? Wie soll denn die Weiterverarvbeitung der Werte aussehen? Mit tausenden Casts? Vielleicht solltest Du Dir eine Klasse erstellen, die die Werte eines Nodes aufnehmen, und dann mit einer List<> diesen Typs arbeiten.
Marko

23.01.2011 - 11:46 Uhr

Hallo,

bist Du Dir denn ganz sicher, dass die Klasse das Interface implementiert? Du kannst ja mal versuchen, Dir alle Interfaces, die von der Klasse implementiert werden, ausgeben zu lassen:


Type[] interfaces = myObject.GetType().GetInterfaces();

Um was für eine COM-Komponente handelt es sich denn?

15.01.2011 - 20:54 Uhr

Soweit ich weiß baut der TFS auf dem Active Directory auf. Also müsstest Du deinen Benutzernamen und Passwort Deines Windows-Accounts eingeben.

15.01.2011 - 20:50 Uhr

Hallo, ich glaube schon zu wissen, dass die App.config (oder App1.config), in der sich der ConnectionString befindet, in dem gleichen Projekt wie das Model befinden muss. Also in Deinem Fall in der Klassenbibliothek. Ansonsten wird der ConnectionString nicht gefunden. Wenn Du die config in ein anders Projet (oder in eine andere Schicht) packst, musst Du ihn bei der Initialisierung des Modells manuell setzen.

Aber wie das geht kann ich Dir leider nicht sagen, da ich noch nicht mit Code First gearbeite habe.

15.01.2011 - 10:12 Uhr

Hi,
warum eigentlich App1.config? Hast Du die umbenannt? Weil normalerweise wird der connectionString in der App.config des Projektes, in der sich das Model befindet, abgelegt. Ansonsten, wenn Du mehrere Connectionstrings hast, kannst Du auch beim Instanziieren des Modells den Connectionstring mit angeben:


using (databaseEntities entities = new databaseEntities("connectionString")
{
            
} 

Marko

06.01.2011 - 07:01 Uhr

Was meinst Du mit umständlich zu realisieren? Also in dem generierten Code würde ich auch nicht eingreifen wollen, aber Du kannst Dir für die Entities, die das Interface implementieren sollen/müssen, partielle Klassen erstellen.
Marko

30.12.2010 - 16:38 Uhr

Ist ja wirklich kompliziert... denn nur bei der Initialisierung der DataGridView funzt das Setzen der Values der Comboboxen nicht. Habe aber auf stackoverflow eine Lösung gefunden: http://stackoverflow.com/questions/3574710 Sieht so aus, als ob es nur möglich ist, über das Event "CellFormatting" die Werte bei der Initialisierung zu setzen. Jedenfalls bei den ComboBoxen.
Also, Event registrieren


dataGridView1.CellFormatting+=new DataGridViewCellFormattingEventHandler(dataGridView1_CellFormatting);

Und der Eventhandler dazu:


private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
   //dies kannst Du auch auslagern, damit der Index nicht jedesmal neu abgefragt werden muss.    
   //Oder halt fest den Index reincoden
   int comboBoxColumnIndex = dataGridView1.Columns.IndexOf(dataGridView1.Columns.OfType<DataGridViewColumn>().Where(dgc => dgc.Name.Equals("Type")).FirstOrDefault());
   //------------------------
   if (e.ColumnIndex == comboBoxColumnIndex && dataGridView1.Rows[e.RowIndex].Cells["Type_ID"].Value != null)
      e.Value = dt_types.Rows.Find(dataGridView1.Rows[e.RowIndex].Cells["Type_ID"].Value).ItemArray.ElementAtOrDefault(1);
}

Hoffe, dass damit das Problem gelöst ist.
LG, Marko