Laden...
C
Benutzerbeschreibung

Forenbeiträge von chriscolm Ingesamt 112 Beiträge

03.09.2015 - 10:28 Uhr

Moinsen,

habe ein bisschen mit SSE herumgespielt. nach einigen GET-Requests hängt sich der IIS (auf Windows 10) komplett auf. Ich kann folgende Fehlermeldung in C:\Windows\System32\LogFiles\HTTPERR\httperr1.log finden:> Fehlermeldung:

Connection_Abandoned_By_ReqQueue ASP.NET+v4.0

Die Anwendung ist eine ASP.NET 4.5 Webanwendung.
Clientseitig kommt folgender js-Code zum Einsatz:

$.get(apppath + "/api/resourceapi", { key: "UH" }).done(function (hash) {
    // alert(hash);
    var source = new EventSource(apppath + "/api/Notification/" + hash);
 ...

Damit wird folgender Server-Code aufgerufen:


public class NotificationController : ApiController
    {
		
		private static ConcurrentDictionary<int, StreamWriter> _subscriber = new ConcurrentDictionary<int, StreamWriter>();
		

        // GET api/notification
        public HttpResponseMessage Get(HttpRequestMessage request, int id)
        {
			HttpResponseMessage response = request.CreateResponse();
			Action<Stream, System.Net.Http.HttpContent, TransportContext> a = new Action<Stream, HttpContent, TransportContext>((e, f, g) => {
					_subscriber.AddOrUpdate(id, new StreamWriter(e), (key, oldValue) => new StreamWriter(e));
				});
			response.Content = new PushStreamContent(a, "text/event-stream");
			return response;					
        }
}

Nach etwa dem 5 Aufruf hängt sich der IIS auf, nimmt keine Anfragen mehr entgegen und muss beendet und neu gestartet werden.

Irgendwer eine Idee?

Grüße

Christian

06.10.2013 - 17:17 Uhr

TabPicture1.Ursprungsbild.Bild = CreateEmptyBitmap(); -> Wo erzeugst Du eine Instanz von Ursprungsbild? In Deinem Beispiel ist Ursprungsbild NULL

04.06.2013 - 14:31 Uhr

Moinsen,

ich benutze ein .docx mit Mergefields, um ein Word-Dokument mit Daten zu füllen. Nun schein Word beim Erstellen der Vorlage die Mergefields manchmal auf mehrere xml-Knoten aufzuteilen, wie ein Blick mit dem productivityTool aus dem SDK zeigt:


<w:r w:rsidR="006F29DF">
  <w:fldChar w:fldCharType="begin" />
</w:r>
<w:r w:rsidR="006F29DF">
  <w:instrText xml:space="preserve"> MERGEFIELD  TBL_Workflow_VBFBerichtTitel  \* MERGEF</w:instrText>
</w:r>
<w:r w:rsidR="006F29DF">
  <w:instrText xml:space="preserve">ORMAT </w:instrText>
</w:r>
<w:r w:rsidR="006F29DF">
  <w:fldChar w:fldCharType="separate" />
</w:r>


Run run74 = new Run(){ RsidRunAddition = "006F29DF" };
FieldCode fieldCode5 = new FieldCode(){ Space = SpaceProcessingModeValues.Preserve };
fieldCode5.Text = " MERGEFIELD  TBL_Workflow_VBFBerichtTitel  \\* MERGEF";

run74.Append(fieldCode5);

Run run75 = new Run(){ RsidRunAddition = "006F29DF" };
FieldCode fieldCode6 = new FieldCode(){ Space = SpaceProcessingModeValues.Preserve };
fieldCode6.Text = "ORMAT ";

Im Beispiel oben ist jetzt nur der Kommentar des Mergefields umgebrochen, aber manchmal passiert das auch etwas früher, nämlich genau in dem Teil, der den Bezeichner für die einzufügenden Daten darstellt, in diesem Beispiel TBL_Workflow_VBFBerichtTitel. Ich habe da noch keine Regelmäßigkeit festestellen können, nur wenn mitten im Bezeichner getrennt wird, ist es natürlich doof, die Daten an der richtigen Stelle unterzubringen. Lässt sich das irgendwie abstellen, dass der Bezeichner auf mehrere Knoten aufgeteilt wird?

Viele Grüße

Christian

25.11.2012 - 22:32 Uhr

Moinsen,

für Deinen geschilderten Anwundungsfall brauchst Du noch kein propertyChanged. Die Zuweisung erfolgt während des Erstellens, die Daten sind schon vorhanden, an die gebunden wird. Wenn Du aber auf Änderungen reagieren willst, musst Du PropertyChanged auch in der GUI abonnieren, also in der Textbox muss so etwas stehen:
TextBox Text={Binding Name, UpdateSourceTrigger=PropertyChanged}...

Grüße

Christian

13.11.2012 - 15:20 Uhr

Moinsen, mit IIS das gleiche Problem. Welche verdammte web.config wird da verwendet? Und wie bekomme ich da meinen eigenen Senf rein? Ich versuche seit heut Mittag "auf die Schnelle" mal eben was auszuprobieren...grummel.

Grüße

Christian

13.11.2012 - 14:18 Uhr

Moinsen,
ich habe ien ASP.NET MVC4 Projekt erstellt mit der vorgegebenen Ordnerstruktur. Was muss ich tun, damit die in dem Ordner Views vorhandene web.config ausgewertet wird, wenn ich das Projekt debugge bzw. über F5 starte? Visual Studio benutzt den integrierten Development Server. Alle Änderungen in der web.config bleiben unberücksichtigt, aber Syntaxfehler werden schon angemeckert (!?!). Ich möchte den Abschnitt connectionStrings auslesen:


<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>

  <connectionStrings>
    <add name="DB" connectionString="Data Source=192.168.0.15,1433;Initial Catalog=PV_xxxxx_5_1;User Id=xxxxx;Password=xxxxxxx;Connection Timeout=30;"/>
  </connectionStrings>

mit diesem Code:


var css = System.Web.Configuration.WebConfigurationManager.ConnectionStrings;
			if (css.Count > 0) {
				var result = css[0].ConnectionString;
				return result;
			}

Ich bekomme aber immer einen default-String ("data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=") zurück 😦

Mit ratlosen Grüßen

Christian

07.11.2012 - 23:09 Uhr

Hallo zusammen,
ich suche ein Zeiterfassungssystem. Mitarbeiter sollen per Mobiltelefon Arbeitsbeginn und -ende dokumentieren. Darüberhinaus wäre es wünschenswert, wenn die Mitarbeiter eine Art Tätigkeitsschlüssel mit übertragen können. Der Anruf beim Zeiterfassungssystem soll kostenlos möglich sein. Die erfassten Zeiten sollen zur weiteren Bearbeitung in ein bereits bestehendes Programm importiert werden können, es muss also eine möglichst einfach anzusprechende Schnittstelle vorhanden sein. Ich habe einige Lösungen gefunden, die aber nicht so richtig ins Anforderungsprofil passen (An und Abmeldung per SMS) oder einfach eine Nummer zu mächtig (und damit vermutlich auch zu teuer) sind. Hat jemand Vorschläge?

Viele Grüße

Christian

08.10.2012 - 09:15 Uhr

Moinsen,
ich habe ein Listview, dessen Items weitere Controls enthalten (TextBox, CheckBox usw). Damit das ListViewItem selektiert wird, habe ich folgenden Syle definiert:


<ListView.ItemContainerStyle>
	<Style TargetType="{x:Type ListViewItem}">
		<Style.Triggers>
			<Trigger Property="IsKeyboardFocusWithin" Value="True">
				<Setter Property="IsSelected" Value="True"/>
			</Trigger>
		</Style.Triggers>
	</Style>
</ListView.ItemContainerStyle>

Der Teil funktioniert soweit auch. Das Problem welches ich nun habe ist, dass ein CommandBinding nicht mehr Funktioniert.
Im Zusammenhang sieht das etwa so aus:


 <Button Command="{Binding DeleteRecordCommand}"                         
                        Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}">
                    <Image Source="Images/Delete.png"
                           Stretch="None" />
</Button>

<ListView ItemsSource="{Binding Topics}"
                      SelectedItem="{Binding SelectedTopic}"
                      SelectionMode="Single">
                <ListView.InputBindings>
                    <KeyBinding Key="Delete" 
                                Command="{Binding DeleteRecordCommand}" />
                    <KeyBinding Key="Add"
                                Modifiers="Control"
                                Command="{Binding AddRecordCommand}" />
                    <KeyBinding Key="N"
                                Modifiers="Control"
                                Command="{Binding AddRecordCommand}" />
                    <MouseBinding MouseAction="LeftClick"
                                  Command="{Binding AddRecordCommand}" />
                </ListView.InputBindings>    
...               

Der DeleteRecordCommand (ein ICommand), an den der Button gebunden ist, funktioniert nur noch zum Teil, es wird CanExecute noch abgefragt, aber Execute wird nicht ausgeführt, wohingegen das InputBinding vom Listview weiterhin funktioniert.
Nehme ich den Style wieder raus, funktioniert auch wieder der an den Button gebundene Command.

Mit ratlosen Grüßen

Christian

20.09.2012 - 10:49 Uhr

Ok, das kann ich soweit nachvollziehen. Aber string und Id sind ja nicht nur unterschiedliche Objekte, sondern auch noch unterschiedliche Typen! Da ist an der einen Stelle m.E. der =-Operator so implementiert, dass er sich verhält, wie erwartet und an anderer Stelle nicht.

19.09.2012 - 16:20 Uhr

Moinsen,
nachdem ich feststellen musste, dass LazyEvaluation im Zusammenhang mit der Bearbeitung von OpenXml offenbar sehr böse ist, hier noch eine Sache, die zwar gelöst, aber nicht verstanden ist:


var bookmarks = subDoc.MainDocumentPart.Document.Body.Descendants<BookmarkStart>();
foreach (var bkStart in bookmarks) {
	string sid = bkStart.Id;
	var debg = subDoc.MainDocumentPart.Document.Body.Descendants<BookmarkEnd>().FirstOrDefault(b => b.Id == bkStart.Id);
	var bkEnd = subDoc.MainDocumentPart.Document.Body.Descendants<BookmarkEnd>().FirstOrDefault(b => b.Id == sid);
	if (bkEnd != null) {
		...
	}
	if (debg != null) {
		throw new Exception();
	}

Warum muss ich erst die Bookmark-id in einen string packen, um anschließend mit der Bookmark-Id vergleichen zu können? Die Exception wird nie geworfen, das heißt, bkEnd.Id == bkStart.Id ist immer false (auch wenn die Werte gleich sind), wohingegen bkEnd.Id == sid bei gleichen Werten auch true ergibt...Auch wenn ich mit Equals vergleiche. Hrmpf....

Grüße
Christian

14.09.2012 - 11:58 Uhr

Moinsen,

ich habe ein paar Methoden gebaut, die in einem docx-Dokument den Text der Kopf- und Fußzeilen austauschen, im Prinzip so als wenn man dort ein Seriendruckfeld platzieren könnte. In der Dokumentenvorlage wird der Schlüssel (im Beispiel INFTitel) in die Kopfzeile eingetragen, der Code soll das dann durch einen anderen Text ersetzen. Mit den Fußzeilen funzt das auch, nur die Kopfzeile weigert sich, obwohl der ausgetauschte Text im OpenXML steht (siehe angehängtes Bild)


private void Process<T>(WordprocessingDocument doc, T data) {
	var main = doc.MainDocumentPart.Document;
	DataProperties<T> dp = new DataProperties<T>(data); 
	// data ist die Datenklasse, aus diesen Daten wird das Dokument befüllt
	// DataProperties<T> besorgt letzendlich die benötigten Werte 
	// Kopf und Fußzeilen
	var header = doc.MainDocumentPart.HeaderParts;
	var footer = doc.MainDocumentPart.FooterParts;
	this.PreProcessHeader(header, dp);
	this.PreProcessFooter(footer, dp);
	....
	....
}			

private void PreProcessHeader<T>(IEnumerable<HeaderPart> header, DataProperties<T> dp) {
	foreach (var h in header) {
		this.ProcessHeaderOrFooter(h.Header, dp);
		h.Header.Save();
	}
}

private void PreProcessFooter<T>(IEnumerable<FooterPart> footer, DataProperties<T> dp) {
	foreach (var f in footer) {
		this.ProcessHeaderOrFooter(f.Footer, dp);
		f.Footer.Save();
	}
}		

private void ProcessHeaderOrFooter<T1, T2>(T1 element, DataProperties<T2> dp) where T1 : OpenXmlElement {			
	var textNodes = element.Descendants<Text>();
	foreach (var t in textNodes.Where(p=> p.Text!=null &&  p.Text.StartsWith("INF")==true)) {					
		FieldProperties fp = new FieldProperties(t.Text); 
		// ermittelt Feldnamen der Mergefields, Formatstrings etc aus dem Dokument
		t.Text = dp.GetValue(fp); 
		// dp.GetValue holt aus der Datenklasse den Wert der Property, der ins Dokument geschrieben werden soll
	}			
}		

Wie gesagt, Fußzeile passt, Kopfzeile nicht, da wird immer der Platzhalter angezeigt, der übrigens in

doc.PackageProperties.Title

steht.
Und genau dieser Titel wird ins Dokument geschrieben, warum auch immer.

Grüße

Christian

06.09.2012 - 14:23 Uhr

Moin,
meines Wissens wird bei der Rechtschreibprüfung auf die Wörterbücher von Word zurückgegriffen, möglicherweise ist auf dem Client kein Word installiert.

Grüße

Christian

13.07.2012 - 14:22 Uhr

Moinsen,

ich bevorzuge in geeigneten Fällen Convert.To...
Wenn das Argument aus irgendwelchen Gründen null ist oder sonstwie nicht passt, gibt Convert.To... den Default-Value des Typs zurück.

object o = null;
int i = (int)o; // -> wummmss!!!
int i = Convert.ToInt32(o); // -> i = 0;

Grüße

Christian

26.06.2012 - 11:50 Uhr

Moinse,
also ich würde das in etwa folgendermaßen lösen:
Oberfläche mit WPF und exzessive Benutzung von Datenbindung,
Ein Masterinterface liest die passende version aus. Dann wird entschieden, welche konkreten Klassen geladen werden müssen.
Eine Klasse enthält eine Liste mit Instanzen einer Bedienelementklasse, die etwa so aussehen könnte:


public class Bedienelement{
 public Type Datentyp {get;set;}
 public string Display{get;set;}
 public object Value{get;set;}
}

An die GUI wird an ein ItemsControl diese Liste mit Bedienelementen gebunden, über einen TemplateSelector kannst Du auswählen, ob eine Checkbox, ein Textfeld oder was auch immer dargestellt werden muss, entscheidend dafür ist der Datentyp in deinem Bedienelement.
Die Klasse, die die Liste mit den Bedienelementen enthält, kann auf Änderungen bzw. Benutzeraktionen (Wert ändern, Speichern o.ä.) entsprechend reagieren. Oder anhand des Masterinterfaces entscheiden, welche Implementation zum Speichern, Ändern usw. geladen werden muss.
Das mal so als grober Denkansatz.

Grüße
Christian

09.05.2012 - 14:51 Uhr

Hi,
so weit ich weiß, beziehen sich die € 17500,- darauf, ob man von der Mehrwertsteuer befreit ist. Liegt Dein Jahresumsatz über 17500,- musst Du auf jeden Fall MwSt abführen. Unabhängig davon wirst Du auf Deine Einkünfte in jedem Fall Einkommensteuer entrichten müssen.
Und ich würde ganz genau in den Arbeitsvertrag gucken, auf jeden Fall meinen Arbeitgeber über die Nebentätigkeit unterrichten und ganz peinlich darauf achten, dass ich mich nicht an der Entwicklung von Software für die Konkurrenz beteilige.
Grüße
Christian

07.05.2012 - 09:47 Uhr

Hi,
geh doch Dein sortiertes Array [1,2,3,4,5] rückwärts durch und ziehe immer das nächste Element vom aktuellen ab und zähl, wie oft das Ergebnis 1 ist. Dann hast Du gleich eine allgemeingültige Lösung um auf eine Straße zu prüfen. Jetzt musst Du nur gucken, ob viermal das Ergebnis 1 war oder 5 mal. Achte auf die Indizes!

Grüße
Christian

02.05.2012 - 15:22 Uhr

Moin,
habe ein editierbares ListView mit ein paar Checkboxen. Dummerweise wird beim Anklicken einer Checkbox nicht die entsprechende Zeile des ListView selektiert, was dazu führt, das der Wert aus der Checkbox dem falschen Objekt zugewiesen wird.
Wie kann ich erreichen, dass die Checkbox zugleich die Entsprechende Zeile markiert?


<GridViewColumn Header="{Binding Source={StaticResource Header}, Path=[public]}">
	<GridViewColumn.CellTemplate>
		<DataTemplate>
			<CheckBox IsChecked="{Binding IsPublic}" />
		</DataTemplate>
	</GridViewColumn.CellTemplate>
</GridViewColumn>       
 

Grüße

Christian

16.03.2012 - 10:23 Uhr

Moin,
habe mir vor einiger Zeit mal ein paar VS-Erweiterungen installiert. Eine davon, bläst die Infos etwas auf, die man erhält, wenn man mit der Maus über einen Member fährt und es einen XML-Kommentar gibt. Problem: Die XML-Kommentare werden ohne Zeilenumbruch angezeigt, also u.U. völlig unbrauchbar. Ich weiß allerdings nicht mehr, wie die Erweiterung heißt und irgendwie finde ich auch nichts, was vom Namen her darauf hindeutet, dass es das sein könnte. Habe mal ein Bild angehängt, kann mir jemand sagen, wie die Erweiterung heißt, die das macht?

Vielen Dank und Grüße

Christian

15.02.2012 - 14:46 Uhr

Moin,
ich habe ein kleines Problem, eine WPF-MessageBox in "modernen" XP/Vista-Style erscheinen zu lassen.
Ich stricke gerade eine alte Anwendung aus NET 1.1 Zeiten um, entferne die Windows-Forms GUI und ersetze sie durch WPF und trenne GUI von Logik etc.
Im Anwendungsmanifest wird jetzt der für die VisualStyles notwendige Eintrag angemeckert mit der Meldung:

Fehlermeldung:
Fehler 2 Die Datei "Microsoft.Windows.Common-Controls, Version=6.0.0.0, Culture=, PublicKeyToken=6595b64144ccf1df, ProcessorArchitecture=, Type=win32" wurde nicht gefunden."

Das Manifest


<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
	<security>
	  <applicationRequestMinimum>
		<defaultAssemblyRequest permissionSetReference="FullTrust" />
		<PermissionSet ID="FullTrust" SameSite="site" Unrestricted="true" />
	  </applicationRequestMinimum>
	</security>
  </trustInfo>
	<dependency>
		<dependentAssembly>
			<assemblyIdentity
				type="win32"
				name="Microsoft.Windows.Common-Controls"
				version="6.0.0.0"
				processorArchitecture="*"
				publicKeyToken="6595b64144ccf1df"
				language="*"
        />
		</dependentAssembly>
	</dependency>

</asmv1:assembly>

Wenn ich auf dem gleichen Rechner ein neues WPF-Projekt anlege, geht es. Was muss ich tun, damit das auch in dem alten Projekt funzt?

Grüße

Christian

09.02.2012 - 15:44 Uhr

Hi chriscolm,

dann setz doch einfach das VerticalAlignment für alle Labels auf "Center".

Christian

Hi,
wie ich das zentriert bekomme, ist nicht das Problem (in diesem Fall VerticalContentAlignment), mich interessiert eher das "warum?"
Irgendwer muss sich etwas dabei gedacht haben, bei unterschiedlichen Datentypen unterschiedliche ausrichtungen zu wählen (setze mal voraus, dass bei MS vor dem Programmieren gedacht wird ...)

09.02.2012 - 15:18 Uhr

Hallo chriscolm,

macht evtl. die TranslationExtension noch irgendwas mit dem Label bzw. dem Text darin?

Nein, die geht nur auf den Inhalt.

Aber wenn ich die Datenbindung ändere, nicht mehr an ein DateTime sondern an einen string binde, ist die Ausrichtung des Contents gleich

09.02.2012 - 14:59 Uhr

Hallo,
wie kommt das zustande? Ich habe vier Labels nebeneinander in einem StackPanel. Das erste und dritte Label erhalten ihren Content direkt aus der Xaml-Datei, das zweite und vierte Label über Datenbinding. Stile sind nicht im Spiel. Die vertikale Ausrichtung ist unterschiedlich.


<StackPanel Grid.Column="1"
                    Grid.Row="2"                    
                    Orientation="Horizontal">
            <Label Content="created" Background="Aquamarine"
                   Uid="lbl_created"
                   loc:TranslationExtension.Translate="True" />
            <Label Content="{Binding Created, StringFormat=d}" Background="Bisque" />
            <Label Content="modified" Background="LightSteelBlue"
                   Uid="lbl_modified"
                   loc:TranslationExtension.Translate="True" />
            <Label Content="{Binding Modified, StringFormat=d}" Background="PapayaWhip" />
        </StackPanel>

Und so sieht es aus (siehe Dateianhang):

Grüße

Christian

25.01.2012 - 16:38 Uhr

Hi,
wie wäre es denn mit einem Postbuild-Script, das die benötigten Daten in eine Datei schreibt, deren Ort per Konvention allen anderen bekannt ist?
Grüße
Christian

(edit) Herbivore hat gerade einen ähnlichen Gedanken gepostet

19.12.2011 - 10:48 Uhr

oje, immer diese Kleinigkeiten...jemand sollte mal eine Sprache für syntaktische Grobmotoriker entwickeln 😃

Vielen Dank für die Antwort

16.12.2011 - 11:27 Uhr

Hallo,
wie sage ich dem Button im DataTemplate, dass er die Datenvalidierung anstoßen soll:

<DataTemplate x:Key="ToolbarButtonTemplate">            
            <Button Command="{Binding,ValidatesOnDataErrors=True,ValidatesOnExceptions=True}"                    
                    ToolTip="{Binding DisplayName}"                      
                    Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}">                
                <StackPanel Orientation="Horizontal">
                    <Image Source="{Binding ImageUrl}"
                           Width="16" />                    
                    <TextBlock Text="{Binding ToolbarButtonDisplayText}"
                               VerticalAlignment="Center"
                               HorizontalAlignment="Right"/>
                </StackPanel>                                       
            </Button>
        </DataTemplate>

Ich erhalte diese Fehlermeldung beim kompilieren:> Fehlermeldung:

Fehler 132 Das Tag "Binding,ValidatesOnDataErrors=True,ValidatesOnExceptions=True" ist im XML-Namespace "http://schemas.microsoft.com/winfx/2006/xaml/presentation" nicht vorhanden. Zeile 15 Position 21.

Mit dem DataTemplate wird eine Toolbar gefüllt:

<ToolBarTray DockPanel.Dock="Left">
        <ex:ToolBarEx ItemsSource="{Binding BaseToolbarCommands}"
                      ItemTemplateSelector="{StaticResource ResourceKey=ToolbarItemTemplateSelector}">            
        </ex:ToolBarEx>
    </ToolBarTray>

Der ItemTemplateSelector tut auch nichts aufregendes, der gibt entweder das ButtonTemplate von oben zurück oder einen Separator.

edit: Der angemeckerte namespace ist eingebunden:

<UserControl x:Class="Agenda.client.Presentation.CommonUserControls.BaseToolBar"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"             
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" ... 

und das DataTemplate ist in den Resourcen des UserControl.

Viele Grüße

Christian

02.11.2011 - 08:46 Uhr

Hi,
SYSDBA und masterkey sind doch Benutzer und Passwort? Allerdings benutzt Du ja offenbar eine eingebettete Datenbank, da gibt es keine Benutzerverwaltung.
Grüße
Christian

15.06.2011 - 14:03 Uhr

Moin,
also der Wurm ist definitiv in der Datenbank, wie ein Analyse mit gfix ans Tageslicht brachte.
Zwei weitere Datenbanken ließen sich problemlos konvertieren, da sagte gfix aber auch, dass die Datenbank in Ordnung sei 😃
Auf zwei Dinge möchte ich noch kurz eingehen, die in den Antworten angesprochen wurden:
Der Ausführungsplan bei SELECT COUNT(*)... oder SELECT COUNT(pk_spalte)... ist der Gleiche, macht also keinen Unterschied. Es wird in beiden Fällen kein Index benutzt.
Wo ist das Problem bei SELECT first...skip.... ohne order by? Läuft ganz sauber durch.

Grüße

Christian

15.06.2011 - 13:42 Uhr

Wie sieht es denn mit Datenbindung aus? Dann ließe sich über einen Converter das ganze schön lösen:


public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {			
			if (value is DateTime) {
				DateTime dt = (DateTime)value;
				if(dt == DateTime.MaxValue || dt == DateTime.MinValue){
					return DependencyProperty.UnsetValue;
				}
			}
			return value;
		}

edit: DateTime.MinValue || DateTime.MaxValue natürlich durch entsprechenden Wert ersetzen...

11.06.2011 - 15:37 Uhr
  1. ist erstmal relativ egal, es geht erstmal ums Prinzip. Außerdem gibt es da unterschiedliche Meinungen, mag auch vom DBMS abhängen.
  2. ExecuteScalar hat nicht funktioniert, deswegen probierte ich den DataReader
  3. Firebird hat die Möglichkeit: SELECT FIRST SKIP 400 ...
  4. Es scheitert bereits an einer Tabelle mit 1300 Datensätzen.

Wie gesagt, bisher hat es immer zuverlässig funktioniert, auch bei Tabellen mit mehreren 100.000 Datensätzen. Ich habe vorhin mal folgendes probiert:
Im Programm das SELECT-Statement angepasst: SELECT * FROM TABELLE WHERE id ≥ 0 AND id < 100
dann jeweils um 100 erhöht
SELECT * FROM TABELLE WHERE id ≥ 100 AND < 200
usw.
Nach 400 Datensätzen hat sich wieder alles sang und klanglos verabschiedet. Ich vermute ja fast, dass die Datenbank selber irgendwo beschädigt ist, nur kann ich mit FlameRobin alles auslesen. Ist aber nicht ADO.NET.
Naja, mal sehen.

10.06.2011 - 22:54 Uhr

verwendetes Datenbanksystem: Firebird 1.5
NET 3.5
VS Express 2010
FirebirdSql.Data.FirebirdClient.dll 2.5.1.0

Moin,

folgendes Problem, und ich könnte gerade echt kotzen, weil es bisher immer funktioniert hat:
Ich übertrage mittels eines kleinen Programmes Datensätze aus einem Firebird 1.5 Server auf einen Firebird 2.5 Server, wegen einiger Änderungen an der Tabellenstruktur mache ich das nicht per Backup und Restore.
Folgender Code soll ausgeführt werden:


int cnt = 0;
            FbDataReader reader = null;
            using (FbConnection c = new FbConnection(FbConnectionStrings[0]))
            using (FbCommand cmd = c.CreateCommand()) {
                cmd.CommandText = "SELECT COUNT(*) FROM " + table;
                cmd.CommandTimeout = 60;
                try {
                    c.Open();
                    object o = 0;
                    reader = cmd.ExecuteReader();
                    while (reader.Read()) {
                        o = reader.GetValue(0);
                    }
                    cnt = Convert.ToInt32(o);
                } catch (Exception ex) {
                    cnt = 0;
                    Log(ex);
                } finally {
                    if (reader != null) {
                        reader.Close();
                    }
                }
            }

Soweit ich das überblicken kann, korrekt und in anderen Konstellationen (SQL Server, MySql etc) auch schon 1000 mal so korrekt gewesen. Verbindung kann geöffnet werden, sobald die Zeile reader.Read() ausgeführt wird, geht irgendwie alles sang und klanglos ins Nirvana. Mein Programm laäft weiter, als wenn nichts wäre, ich bekomme keine Fehlermeldung, es wird weder die folgende Zeile noch die catch-Klausel erreicht. Probiere ich das mit einem UPDATE-Befehl und cmd.ExecuteNonQuery() ist alles gut. Auch kann ich an anderer Stelle Datensätze lesen, bis beim Lesen die ersten 500 Datensätze einer Tabelle übersprungen werden sollen. Dann passiert das Gleiche wie eben beschrieben.
Ich kann mit FlameRobin alle mit ADO.NET scheiternden Befehle ausführen. Also Datenbank scheint in Ordnung zu sein, der Datenbankserver ist erreichbar und ich weiß irgendwie nicht so recht weiter. Falls jemand eine Idee hat, bin ich dabkbar. Grüße
Christian

07.06.2011 - 08:31 Uhr

Moin,
dann lass doch nicht die Clients direkt mit der Datenbank sprechen sondern über einen Server, der alle angemeldeten Benutzer verwaltet und ggf. Zugriffe sperrt, falls der von Dir geschilderte Fall droht, einzutreten.

Grüße

Christian

22.05.2011 - 20:45 Uhr

Hi,

ich habe Deinen Code jetzt mal nur oberflächlich angesehen, aber die Zufallszahl, die Du erzeugst, ist möglicherweise immer die gleiche. Auf jeden Fall solltest Du das new Random() außerhalb der Schleife erzeugen und auch mal einen Seed mitgeben.

Ach ja, und bei Backtracking sollte man auch mal an Rekursion denken.

Grüße

Christian

10.05.2011 - 11:08 Uhr

Moin,

vielen Dank , speziell an herbivore, das ist schlüssig und nachvollziehbar.

Grüße

Christian

09.05.2011 - 16:11 Uhr

na, mir ist schon klar, wie ich casten muss.
Mich interessiert halt, warum der Kompiler im einen Fall offenbar ein Integer sieht bzw nicht implizit casten kann, im anderen aber ein Byte.

byte[] testArr = new byte[]{true ? 1 : 0}

funzt übrigens auch. Ich meine, schließlich kann ich doch auch

byte b = 1;

deklarieren ohne dass der Kompiler meckert; hier findet ein impliziter Cast statt.

Grüße

Christian

09.05.2011 - 15:53 Uhr

Hallo,

gerade über eine Merkwürdigkeit gestolpert:


bool test = false;
byte[] testArr = new byte[] { test ? 1 : 0 };
byte[] testArr_2 = new byte[] {false ? 1 : 0 };

Kann mit jemand erklären, warum die untere Zeile anstandslos kompiliert wird, die mittlere aber nicht? Die Fehlermeldung:> Fehlermeldung:

Fehler 1 Der Typ "int" kann nicht implizit in "byte" konvertiert werden. Es ist bereits eine explizite Konvertierung vorhanden. (Möglicherweise fehlt eine Umwandlung.)

Grüße

Christian

05.04.2011 - 10:03 Uhr

Hallo,

ich habe folgende Situation:
Eine generische Klasse


public Generisch<T>{
    public T Wert { get; set; }
}

Soweit kein Problem, die Klasse soll nur in eine Liste, und da liegt das Problem:
List<Generisch> Liste = new List<Generisch>()
Das wird angemeckert, da hier das Typargument fehlt. Das Problem ist hier, dass T in den einzelnen Elementen der Auflistung unterschiedlich sein kann, also die Liste soll beispielsweise so aussehen können (Pseudocode):


List<Generisch> Liste = new List<Generisch>{
Generisch<int>,
Generisch<DateTime>,
Generisch<string>
}

Bin mir momentan gar nicht sicher, ob das überhaupt geht und wenn ja, wäre ich für den einen oder anderen Hinweis sehr dankbar.

Grüße

Christian

04.04.2011 - 14:07 Uhr

Also, in der AssemblyInfo.cs muss man die Versionsnummer festlegen:
[assembly: AssemblyVersion("2.0.0.0")] dann klappt es auch mit der Einbindung über xaml. Offenbar wird die Assembly zweimal kompiliert und irgendwo geraten intern die Verweise durcheinander, wenn die Versionsnummer * enthält. Wenn jemand eine genauere/fachlich richtigere Begründung hat, wäre ich dankbar.

Grüße

Christian

04.04.2011 - 14:03 Uhr

Hi,

hab ich das richtig verstanden? Du hast in etwa diese Struktur:

<Usercontrol>
    <Frame Source="Die page, die die Datenbindung verloren hat.xaml>
    ....

Der Datenkontext aus dem Usercontrol ist in der Page nicht verfügbar? Das ist so gewollt, aus Sicherheitsgründen wird der Datencontext nicht in die Page übernommen.
Siehe z.B.:
http://social.msdn.microsoft.com/Forums/en/wpf/thread/9d96e53d-94cc-4089-a51d-944d3a362870

Grüße

Christian

30.03.2011 - 14:21 Uhr

Hi,
ja.
Frag doch das InformationSchema ab. Ist Sql-Standard, sollte also auf den üblichen DBMS in etwa gleich funktionieren.
Oder benutz die Methoden um SqlConnection.GetSchema(), da kannst Du verschiedene Parameter übergeben und auch die Schlüssel rausfinden. Da weiß ich jetzt aber nicht, ob es entsprechende Methoden für Oracle (vermutlich ja) und Access (vermutlich eher nicht) gibt.

Grüße

Christian

29.03.2011 - 12:26 Uhr

Hallo,

habe ein Problem mit einem UserControl. WindowMain steckt in einem ElementHost innerhalb eines Windows.Forms.
Wenn ich im Xaml das UserControl hinzufüge, fliegt mir alles um die Ohren:


<UserControl x:Class="Anwendung.Client.Presentation.WindowMain"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:common="clr-namespace:Anwendung.Client.Presentation.CommonUserControls">
...
    <DockPanel Grid.Column="1" Name="dp_main">
            <common:MainTabControl />     
    </DockPanel>

In der Debug-Ausgabe vom VS sehe ich lediglich, dass eine XamlParseException in PresentationCore.dll aufgetreten ist, die Exception, die ich beim Einbau des UserControls WindowMain in den ElementHost bekomme, sagt sinngemäß, dass der Assembly-Verweis von der Versionsnummer her nicht stimme.

Baue ich das UserControl per CodeBehind ein, ist alles gut:


public WindowMain() {
			InitializeComponent();
			CommonUserControls.MainTabControl tab = new CommonUserControls.MainTabControl();
			try {
				this.dp_main.Children.Add(tab);
			} catch (Exception ex) {
				string msg = ex.ToString();
			}
		}

jemand eine Idee?

Grüße

Christian

28.02.2011 - 20:04 Uhr

Hallo,
ich plane eine kleine Grafikanwendung, die hauptsächlich eine 2D-Ansicht einiger 10000 durch Linien verbundener Punkte anzeigen soll (schon "unwesentlich" komplexer, aber im Prinzip passiert das). Es sollen einzelne Elemente editierbar sein.
Langfristig möchte ich dem ganzen auch eine 3D-Ansicht spendieren.
Jetzt gibt es zumindest für den 2D-Krams ja mehrere Möglichkeiten:
direkt in ein Bitmap zeichnen, für 3D dann auch OpenGL, TaoFramework, Axiom und bestimmt noch einiges mehr.
Die Anwendung möchte ich mit MonoDevelop entwickeln und sie soll sowohl unter Linux als auch unter Windows lauffähig sein. Für die GUI habe ich GTK# vorgesehen.

Gibt es Empfehlungen für die Erzeugung der Grafik?

Vielen Dank und Grüße

Christian

18.02.2011 - 08:40 Uhr
//Nicht schön... aber hoffentlich nachvollziehbar  
                if (x < 2) {  
                    x++;  
                } else {  
                    x = 0;  
                    y++;  
                }  

Das geht in die Hose. Du musst x solange inkrementieren, bis x % 3 = 0, dann haste 3 in einer Reihe, dann musste y einmal inkrementieren und x auf 0 stellen, um die nächste Reihe mit 3 Buttons zu füllen

Grüße

Christian

16.02.2011 - 08:59 Uhr

Hallo,
hast Du mal überprüft, ob Deine Anwendung einen angemeldeten Benutzer auf dem Server benötigt? Möglicherweise sind durch Server-Updates o.ä. wichtige Voraussetzungen für Dein Programm abhanden gekommen.

Grüße

Christian

14.02.2011 - 13:12 Uhr

Hi,
wenn beide Datenbanken auf dem Selben Datenbank-Server liegen, geht auch sowas:
insert into DatenbankA.Tabelle (SELECT * from DatenbankB.tabelle)

Grüße

Christian

27.01.2011 - 16:20 Uhr

Tja, nun melde ich mich doch schneller wieder, als mir lieb ist. Das Entfernen des alten Setup-Projektes war NICHT von Erfolg gekrönt, kann wieder nicht kompilieren, muss VS schließen und Projekt neu laden.

Grüße

Christian

26.01.2011 - 11:28 Uhr

Hallo,
da es recht unvorhersehbar ist, wann mal wieder eine dll gelockt ist, würde ich vorschlagen, ich erstatte Rückmeldung, wenn das Entfernen des alten Setup-Projektes KEINEN Erfolg hatte. Also, solange ich hierzu nichts weiter schreibe, ist alles gut 😃

Grüße

Christian

25.01.2011 - 17:10 Uhr

Ja, ein Wix-Setup und ein altes, nicht mehr benutztes VS-Setup. Könnte mal rausfliegen. Danke für den Hinweis.

25.01.2011 - 15:46 Uhr

Hallo,

mehr oder weniger zufällig wird bei mir gerne mal die Ausgabe-dll (Kompilat) eines Projektes gelockt. VS meint dann, die dll nicht aus dem obj-Ordner kopieren zu können. Das passiert manchmal wochenlang nicht, dann wieder mehrmals pro Tag. Manchmal kommt es vor, wenn ich im Designer GUI bearbeitet habe, manchmal auch ohne das. Es hilft nur Neustart von VS 2010 (sehr nervig, da ca 70 Projekte in der Solution).
Irgendwelche Tipps? Ähnliche Erfahrungen? Habe keine Ahnung, wo ich ansetzen kann.

Grüße

Christian

23.01.2011 - 16:55 Uhr

Hallo,

da würde ich mal die Berechtigungen überprüfen, mit denen der IIS läuft. Lokales System hat beispielsweise normalerweise keine Netzwerkberechtigungen, Netzwerkdienst darf unter Umständen nicht an die Datenbank...

Grüße

Christian