Gast3 schrieb:
oder kann man das was du hier ansprichst auch auf die Methode/Parameter Probleme anwenden?
Ja, das sollte gehen.
Indem du die Message direkt definierst. Ist halt umständlicher.
hustbaer schrieb:
Laut dem was ich mir so ergoogle ist das SendTimeout client-seitig das Timeout für den ganzen Prozess, also inklusive dem Empfangen der Antwort! Also das was du sicher nicht runterschrauben willst.
Siehe https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/configuring-timeout-values-on-a-binding
Versuch mal nur das OpenTimeout runterzuschrauben.
Ja der war mitunter auch beteiligt.
Bin jetzt so verblieben, das ich den OpenTmeout und den CloseTimeout möglist klein halte, bei mir jetzt je 2 Minuten.
Den SendTimeout hab ich etwas heruntergeschraubt, ist jetzt bei 5 Minuten und der ReceiveTimeout hat keine direkte Auswirkung auf mein genanntes Problem, was deine Aussage unterstreicht.
Die .NET-Methode benutzt auch nur direkt die WinAPI-Funktion FindFirstFile (sowie FindNextFile) (tief versteckt wird es wohl so eine Funktion geben, aber diese ist -warum auch immer- nicht öffentlich).
Aber eine .NET-Implementierung gibt es wohl doch (wenn auch VB.NET): Wildcard matching in C#
Oder alternativ gibt es noch die WildCardPattern-Klasse mit der Methode IsMatch.
Und Harddisk ist vielleicht ein technisch cooler Name - verliert aber jeglichen sinn wenns keine Harddisk sonder Ramdisk oder sonstwas ist - da kannst du deine Routinen auch saveonfat32harddisk nenenn, lieber saveto loadfrom file
Nun der einfachste Weg der mir einfällt wäre, eine Klasse zu basteln die den Scanner noch einmal Kapselt. Dort stellst du ein Event bereit was im Grunde nur das Event des Scanners weiterleitet.
Wird nun das Event des Scanners geworfen, kannst du dein eigenes Event auslösen und alle Objekte die das Event aboniert haben können entsprechend reagieren.
Ich kann mir allerdings beim besten Willen nicht vorstellen, dass das Event des Scanners nur den ersten Abonenten informiert. Nutzt du tatsächlich immer die gleiche Instanz des Scanners oder hast du in den einzelnen Forms jeweils eine eigene Instanz? Das solltest du natürlich vermeiden.
Ja wenn es sich um verschiedene Threads handelt ist das Problem einfach, dass diese nicht untereinander Daten verändern dürfen. Es gibt noch die Eigenschaft "InvokeRequired" die du in dem Zusammenhang abprüfen kannst, bevor du dich entscheidest zu "invoken"
Und: Welchen DB-Server meinst du? MS-SQL
MSSql 2008 R2
Verbuggter Treiber? Kannst du alternativ mal ne andere C# Library versuchen um mit dem Server zu plaudern?
ich benutze einfach den (System.Data.SqlClient.)SqlConnection+SqlConnectionStringBuilder und SqlConnection.GetSchema
-> denke dann geht es wohl ueber Microsoft ADO
welchen Treiber kann ich denn sonst noch nutzen?
Falls du MS-SQL meinst kannst du auch probieren mit " zu quoten (dazu muss allerdings die Option QUOTED_IDENTIFIER auf ON sein)
darf an dem Server nichts umstellen
Und falls du MySQL meinst... da würde es mich nicht wundern wenn die Library die du verwendest das einfach nicht kann.
ist MSSql - aber ich verwende im Normalfall nur die Hersteller-Wege - keine anderen Libs
Hallo,
ich ziehe per Drap and Drop Emails von outlook in mein Programm.
Funktioniert alles ich kann über Microsoft.Office.Interop.Outlook.MailItem die ganze email auswerten.
Was ich nicht erkennen kann ist ob die Email Eingehend oder Ausgehend ist.
Weiß jemand wie man das feststellen kann ?
hustbaer schrieb:
@inflames2k
Hä?
Natürlich werden auch Objekte weggeräumt die nen Finalizer haben. Nur halt typischerweise einen GC Durchlauf später. Weil halt erst noch der Finalizer laufen muss.
Habe ich irgendwo etwas anderes behauptet?
In C# bedeutet new nicht notwendig eine Heap-Allokation.
Nein, das war mir nicht klar. Interresante Info.
---
Prinzipiell okay, aber solange du keinen Profiler drüberjagst, weißt du ja nie, ob die Allokationen unnötig sind. Mach das mal, geht ja einfach und dauert nicht lang
Werde ich machen.
hustbaer schrieb:
Das ist keine Fehlermeldung sondern bloss ein Debug-Hinweis. Sollte auch nur im Debugger angezeigt werden und sonst nirgends.
Gut, dann spricht ja nichts dagegen wenn ich das so lasse.
hustbaer schrieb:
Du könntest versuchen statt des Pfades ne file: URL zu übergeben. Weiss aber nicht ob das dann mit relativen Pfaden funktioniert.
Habe ich ausprobiert, scheint aber nicht zu gehen.
Man kann es aber auch so machen, dann kommt keine Warnung:
FileStream fStrm = new FileStream("stereo_16bit.wav", FileMode.Open);
new System.Media.SoundPlayer(fStrm).Play();
fStrm.Close();
Gruß
Michael
Hallo.
Ich habe mir eine DataTable abgeleitet und um ein paar Funktionen für den SharePoint-Zugriff erweitert.
public struct SharePointConnectionData
{
public System.Uri Link;
public string ListName;
public SharePointConnectionData(System.Uri fLink, string fListName)
{
this.Link = fLink;
this.ListName = fListName;
}
public string GetConnectionStringForReading() { return "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=1;DATABASE=" + Link.ToString() + "; List=" + ListName; }
public bool IsDefined()
{
if(this.Link == null || this.Link.ToString() == string.Empty) { return false; }
if (this.ListName == null || this.ListName == string.Empty) { return false; }
return true;
}
}
public class MyDataTable : System.Data.DataTable
{
#region PUBLIC:
#region Constructor
public MyDataTable() : base(){}
public MyDataTable(string TableName) : base() {this.TableName = TableName;}
#endregion
#region Row and Column access
public System.Data.DataRow GetRowByKeyFromTable(System.Collections.Generic.KeyValuePair<string, string> SearchKey)
{
#region Checking if SearchKey is contained in DataTable
if (!this.Columns.Contains(SearchKey.Key)) { return null; }
#endregion
#region Search and Return Row
foreach (System.Data.DataRow Row in this.Rows)
{
if (Row[SearchKey.Key].ToString() == SearchKey.Value.ToString())
{
return Row;
}
}
return null;
#endregion
}
#endregion
#region Sharepoint connection
public void InitializeSharePointConnectionData(System.Uri fLink, string fListName) { this.SharePointConnectData.Link = fLink; this.SharePointConnectData.ListName = fListName; }
public void LoadSharePointList()
{
#region Local variables
string strSQL = string.Empty;
System.Data.OleDb.OleDbCommand cmd = null;
System.Data.DataSet ds = null;
System.Data.OleDb.OleDbDataAdapter da = null;
#endregion
#region GetDataFromSharePoint
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(this.SharePointConnectData.GetConnectionStringForReading());
strSQL = "SELECT * FROM LIST";
cmd = new System.Data.OleDb.OleDbCommand(strSQL, conn);
ds = new System.Data.DataSet();
ds.Locale = System.Globalization.CultureInfo.InstalledUICulture;
da = new System.Data.OleDb.OleDbDataAdapter(cmd);
da.Fill(ds);
this.Merge(ds.Tables[0]);
#endregion
#region Clearing
ds.Dispose();
da.Dispose();
#endregion
}
public void UpdateTableInServerList()
{
#region Local variables
string strSQL = string.Empty;
System.Data.OleDb.OleDbCommand cmd = null;
System.Data.DataSet ds = null;
System.Data.OleDb.OleDbDataAdapter da = null;
System.Data.DataTable dt = null;
#endregion
#region GetDataFromSharePoint
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(this.SharePointConnectData.GetConnectionStringForReading());
strSQL = "UPDATE * FROM LIST";
cmd = new System.Data.OleDb.OleDbCommand(strSQL, conn);
ds = new System.Data.DataSet();
ds.Locale = System.Globalization.CultureInfo.InstalledUICulture;
da = new System.Data.OleDb.OleDbDataAdapter(cmd);
da.Update(this.Select(null, null, System.Data.DataViewRowState.ModifiedCurrent));
#endregion
}
#endregion
#region Filter functions
public void FilterByFilterExpression(string FilterExpression)
{
this.FilterByFilterExpressionFkt(FilterExpression);
}
#endregion
#endregion
#region PRIVATE:
#region Private variables
SharePointConnectionData SharePointConnectData;
#endregion
#region Private Functions
private void FilterByFilterExpressionFkt(string FilterExpression)
{
System.Data.DataView dv = new System.Data.DataView(this.Copy());
this.Clear();
dv.RowFilter = FilterExpression;
this.Merge(dv.ToTable());
}
private string GetFilterExpressionByDataTable(System.Data.DataTable FilterTable)
{
string FilterExpression = string.Empty;
return FilterExpression;
}
#endregion
#endregion
}
Alles läuft ohne Fehler. Allerdings die Funktion UpdateTableInServerList() hat irgendwie keinen Effekt. Die Liste bleibt unverändert. Weiß jemand, warum er die Tabelle nicht zurück schreibt?
Gibt es auch eine Möglichkeit ÜBER OLE (Zugriff über Microsoft.SharePoint.Client. reicht mir nicht aus!!!!) nur eine Zelle zu verändern, ohne immer gleich die komplette Tabelle hin und her zu laden?
EDIT: Wenn ich mir eine Row aus der Table herausnehmen, dort einen Eintrag ändere und mir dann den RowState ansehe, so ist dieser "Added"!???! Wieso das?
Hat das vllt. damit zutun, dass er nicht das Update ausführt?
Vielen Dank und Grüße,
CJens