VB Code
Nachdem ich bei Klaus gelesen hatte, wie er es gelöst hat, eine App nur einmal zu starten, musste ich nochmal extrem nachdenken, bei welchem Projekt und wie ich das gelöst hatte.
Das mir das nicht nochmal passiert, habe ich hier mal den Code verewigt.
Ursprünglich von Codeproject in c#.
1 Imports System
2 Imports System.Windows.Forms
3 Imports System.Runtime.InteropServices
4 Imports System.Text
5 Imports System.Diagnostics
6 Imports System.Threading
7 Imports System.Reflection
8 Imports System.IO
9
10 Namespace SingleInstance
11 ''' <summary>
12 ''' Summary description for SingleApp.
13 ''' </summary>
14 Public Class SingleApplication
15
16 Public Sub New()
17 End Sub
18 ''' <summary>
19 ''' Imports
20 ...
Manchmal ist es ganz praktisch eine Generic List im Repeater zu nutzen.
Mit <%# eval("Parameter")%> kommt man aber nicht weit.
Mit <%# Container.DataItem.Value1 %>aber schon:
Public Class ClassName
Public Value1 As String
Public Value2 As String
End Class
Dim Listname As New List(Of ClassName)
Dim Item1 As New ClassName
Item1.Value1 = "TestValue1"
Item1.Value2 = "TestValue2"
Listname.Add(Item1)
Repeater1.DataSource = Listname
Repeater1.DataBind()
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<%#Container.DataItem.Value1%>
</ItemTemplate>
</asp:Repeater>
In einem ASP.NET CMS habe ich eine Möglichkeit gesucht in einem FCKEditor diverse Platzhalter in Artikel-Tex einzusetzen, die später dann durch aktuelle Inhalte und Werbung ersetzt werden könne.
Am schönsten wäre es natürlich, wenn es auch im Editor bereits angezeigt wird um zu sehen, wie der Text um den potentiellen Inhalt läuft.
Die API des FCKEditors möchte ich nicht anfassen also muß iich mit vorhandenen Mitteln zu Rande kommen.
Trick 1.
Um die Größe und Position im Content zu definieren, nehme ich ein image in vergleichbarer Größe (wie das Bild rechts).
Trick 2.
Ich definiere mir Styles für den FCKEditor und generiere diese mit einem...
Eigentlich hatte Martin Hey genau im richtigen Moment seinen Post zum Thema veröffentlicht.
Aber dann fiel mir ein, dass wenn es einen Vorteil von VB.NET gegenüber c# gibt, dann ja wohl im XML-Bereich.
Ein Imports am Kopf der Seite reicht um den Namespace Global einzufügen.
Das Ganze gepaart mit einem InsertAllOnSubmit habe ich in ein paar wenigen Zeilen alle Categories aus meinem XML-Dokument in die Datenbank importiert.
1 Imports <xmlns="http://www.ticketonline.de/ticketonlineevents/1.0">
2 Imports <xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
3
4 Partial Class LoadTicketOnline
5 Inherits System.Web.UI.Page
6
7 Protected Sub Page_Load(ByVal sender As Object, _
8 ByVal e As System.EventArgs) Handles Me.Load
9
10 Dim...
Für eine Image-Gallery in in einem Community-Projekt, habe ich mir eine Lösung mit jQuery erstellt, um Bilder online zu bearbeiten.
Also hauptsächlich Resize und Cropping.
Dabei enstand als kleines Nebenprodukt eine Lösung, bei der man einen Deepzoom auf große Bitmaps machen kann.
Eine einfache Version davon habe ich hier mal online gestellt:
DeepZoom mit jQuery
Download als ASP.NET - Website
Das verwendete Bild auf dem Server ist 7MB groß und...
Ich mache das ja schon lange.... und ich habe auch schon einiges mit Bildern zu tun gehabt.
Aber jedes mal wieder fummele ich mir aus alten Codes oder dem Internet die Funktionen für Größenveränderungen heraus.
Meist sind diese (vor allem bei gegoogelten Beispielen) gespickt mit Spezialfunktionalität.
Diesemal habe ich mir die Mühe gemacht - ein für alle Mal - drei Funktionen zu generieren, die sowohl Cropping, Resizing oder aber beides gleichzeitig in bestmöglicher Qualität zu liefern.
Und da ich meißt nur ein Stream oder Byte() benötige, bekomme ich as Rückgabewert auch ein MemoryStream.
Diesen kann ich in die Datenbank schieben oder per BinaryWrite direkt ausgeben.
1 Imports...
Beim Entwickeln einer Webplattform macht man ja gerne den einen oderanderen HTML Fehler.
Auch wenn mir das immer seltener passiert, ist es dennoch schön wenn man gleich Probleme mittels Holzhammermethode mitgeteilt bekommt.
Bekanntlich kann man in Page Render den HTML-Code abgreifen.
Wenn man daraus ein XElement generieren kann, ist der Code zumindest schon mal valiedes XML.
Wenn dies nicht funktioniert lasse ich mir die Fehlemeldung ausgeben und kann de Fhler gleich korrigieren.
Kleiner Nebeneffekt:
Der HTML-Code ist absolut perfekt eingerückt und die Struktur klar ersichtlich, auch wenn man viele Usercontrols zusammensteckt.
Ob man dies in einer Live-Website einsetzt ist sicherlich fraglich.
1
2 Partial Class _Default
3 Inherits System.Web.UI.Page
4
5
6
7 Protected Overrides...
In meinen Webprojeten benutze ich natürlich auch immer wieder Session-Variablen, die dann wiederum an anderer Stelle abgerufen werden.
Abgesehen von möglichen Schreibfehlern, bin ich auch imer wieder auf der Suche nach der richtigen Bezeichnung.
Die wichtigsten lagere ich jetzt in eine kleine Klasse aus:
1 Public Class Properties
2 Public Enum VariableName
3 UserID = 1
4 UserName = 2
5 'usw.
6 End Enum
7
8 Public Shared Property Session(ByVal name As VariableName) As Object
9 Get
10 Return HttpContext.Current.Session _
11 ("adjustment.properties.session." & name.ToString)
12 End Get
13 Set(ByVal value As Object)
14 HttpContext.Current.Session _
15 ("adjustment.properties.session." &...
Ich habe heute wieder meine Recherche aufgenommen um ein VPN automatisch zu verbinden, nachdem der Computer im Ruhezustand oder im Energiesparmodus war. (Inspiriert durch einen Blogeintrag von Bernd Hengelein.)
Wenn eine z.B. WLan-Verbindung abbricht (und damit auch das VPN getrennt wird) oder verbunden wird tritt dieses Ereignis ein.
System.Net.NetworkInformation.NetworkChange.NetworkAvailabilityChanged
Mit folgender Routine kann man dann die Connection wieder herstellen
3 Sub startVPN(ByVal ConnectionName as String) '
4 Process.Start("RasPhone.exe", "-d " & ConnectionName)
5 End Sub
Eine sehr einfache Umsetzung einer Consolen-Anwendung (z.B. im Autostart) könnte dann folgendermaßen aussehen:
(Zumindest im Debugmodus hat dies problemlos funktioniert)
1 Imports System.Net.NetworkInformation
2
3 Module Module1
4 Sub Main()
5
6 AddHandler NetworkChange.NetworkAvailabilityChanged, _
7 AddressOf NetworkChange_NetworkAvailabilityChanged
8
9 ...
Beim Stöbern auf CodePlex bin ich über das opensource Projekt "DotNetAge jQuery" gestoßen und bin mehr als angetan.
DotNetAge ermöglicht es jQuery Features in Webcontrols zu nutzen (beispielsweise kann jedes Control mit Resize versehen werden) und bietet aber auch eine ganze Reihe von Webcontrols die Features wie Accordion, Dragpanels usw. direkt bieten.
Für jQuery-Plugins gibt es ebenfalls eine Möglichkeit, diese einzubinden.
Sehr gut gelöst und auch nach Stunden des herrumspielens bin ich immernoch angetan von der Lösung.
Schöner Mix zwischen voller Funktionalität von jQuery und der Einfachkeit für tägliche Standardanwendungen.
[Die Bilder sind von der Website DotNetAge]
Unfortunately, there is still no way to use the new hierarchyID-dataTpe in LinqToSQL or Entity Framework. (Microsoft 12.5.2009)
Because the data type is very practically, fast and over and over again hierarchy appears within comments, menu structures etc., I want to use them nevertheless.
For this I provide first of all a table which has a ContentID (Integer value wich refers to my content), the HierarchyID of course and assoziationTypeID, because this table is for different Content (Comments has ID=1, Menu ID=2 etc.).
CREATE TABLE [dbo].[t_C_ContentHierarchy](
[d_C_ContentHierarchyID] [int] IDENTITY(1,1) NOT NULL,
[d_ContentID] [int] NOT NULL,
[d_hierarchyID] [hierarchyid] NOT NULL,
[d_I_assoziationTypeID] [int] NOT NULL,
CONSTRAINT [PK_t_C_UserContentHirarchy] PRIMARY...
Leider gibt es noch keinen Weg, in LinqToSQL oder Entity Framework den neuen Datentyp HierarchyID in MSSQL-Server 2008 zu nutzen. (Microsoft am 12.5.2009)
Da der Datentyp sehr praktisch, schnell und immer wieder Hierarchien bei Kommentaren, Menüstrukturen usw. auftreten, will ich ihn natürlich trotzdem nutzen.
Hierfür erstelle ich erst einmal eine Tabelle, die eine ContentID enthät, welche die Integer-ID meines Contents enthält, die HierarchyID natürlich und eine assoziationTypeID, da ich diese Tabelle für unterschiedlichen Content nutzen möchte.
CREATE TABLE [dbo].[t_C_ContentHierarchy](
[d_C_ContentHierarchyID] [int] IDENTITY(1,1) NOT NULL,
[d_ContentID] [int] NOT NULL,
[d_hierarchyID] [hierarchyid] NOT NULL,
[d_I_assoziationTypeID] [int] NOT NULL,
CONSTRAINT [PK_t_C_UserContentHirarchy] PRIMARY KEY CLUSTERED
(
[d_C_ContentHierarchyID] ASC
)WITH (PAD_INDEX = OFF,...
In einem Datenexport aus Zope fand ich diverse Escape-Zeichen für alle Sonderzeichen.
Offensichtlich HEX-Codiert mt einem \x vorab. Also für ö ein \xf6 usw.
Die Suche nach Listen für ein globales Replace gab ich recht schnell auf und generierte meine eigene Liste:
...
Jeder kennt das Problem... Man hat einen formatierten String und möchte diesen im Code verwenden.
zwei Möglichkeiten.... entweder man stückelt Ihn über mehrere Zeilen zusammen oder man macht eine gaaaaanz lange Zeile daraus.
Beides ist unbefriedigend und mühsam.
Gestern habe ich nun das XElement dafür entdeckt :
1 Dim SQL As New XElement(<root>
2
3 SELECT CMS_Artikel.Dachzeile,
4 CMS_Artikel.DateFrom,
5 CMS_Artikel.CreateDate,
6 User_User.RealName,
7 CMS_Artikel.ArtikelID
8 FROM CMS_Artikel...
Und mal wieder habe ich Probleme auf einem Server Umlaute in Cookies zu speichern bzw. zu lesen.
Die Tipps sind vielfältig und variiren von Server.URLDecode bis hin zu Globalization Eiträgen in der Web.Config.
Diesmla half gar nichts... Deswegen werden die CookieInformationen ab sofort Base64-codiert.
Damit hat sich das Thema - hoffentlich
String to Base64
1 Dim base64String As String = _
Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("äüö$$"))
2
3 Dim c As New HttpCookie("testCookie")
4 c("value") = base64String
5 Response.Cookies.Add(c)
6
7
Base64 to String
9 Dim base64FromCookie As String = _
Request.Cookies("testCookie").Values("value")
10
11 Dim standardString As String = _
Text.Encoding.UTF8.GetString(Convert.FromBase64String(base64FromCookie))
12
13 Response.Write(standardString)
[edit 25.6.2009]
Hier ist eine Lösung um ein
VPN verbinden nach unterbrochener Netzwerkverbindung (mit .NET) oder um eine
VPN verbinden nach Energiesparmodus(mit .NET)
[/edit 25.6.2009]
Um eine VPN-Verbindung mit .NET starten genügt ein Einzeiler.
Vorraussetzung ist, dass das Kennwort gespeichert ist und die Abfrage deaktiviert.
Wobei myVPN_Connection der Name der Verbindung unter Windows ist:
1 Module Module1
2
3 Sub Main()
4 Process.Start("RasPhone.exe", "-d myVPN_Connection")
5 End Sub
6
7 End Module
In einem Bestellsystem für Stromverträge kann ein User aus einer Ergebnisliste eine Bestellung auslösen.
Die Linq-Abfrage hierzu ist mehr als komplex und die Werte in den verbundenen Tabellen werden in verschachtelten Repeatern auf der Website dargestellt.
Da wöchentlich die Datenbank ausgetauscht wird, möchte ich gerne im System die Daten aus dem Ergebnis hinterlegen.
Dummerweise ist ein LinqToSQL-Ergebnis nicht serialisierbar.
Im Netz habe ich auch nichts gefunden und mir meine eigene rekursive Methode gebastelt:
Sicherlich noch verbesserungsfähig... aber für das aktuelle Problem austreichend.
01 Imports System.Reflection
11
12 Public Function getXElementFromLinqObject(ByRef RootElement As XElement, _
13 ByVal DataObject As Object) As...
Ich habe eine Anwendung, die die entsprechende Contentdatenbanken jeweils per Hostname auswählt.
Da ich prinzipiell den SqlMembershipProvider nutze, möchte ich wenn möglich, den Applicationname des Mebershipproviders entsprechend anpassen.
Hier ist der entsprechende Providder dazu:
Imports System
Imports System.Web
Imports System.Data
Imports System.Configuration
Imports System.Collections
Imports System.Web.Security
Imports System.Collections.Specialized
Imports System.Data.SqlClient
Class myMembershipProvider
Inherits System.Web.Security.SqlMembershipProvider
Public Overrides Property ApplicationName() As String
Get
Return HttpContext.Current.Request.Url.Host
End Get
Set(ByVal value As String)
MyBase.ApplicationName = HttpContext.Current.Request.Url.Host
End Set
End Property
End Class
Wenn man mit seiner .NET Website bei einem Hoster ist, wird in der Regel nach 20 bis 60 Minuten die Website "heruntzergefahren", was leider beim Neustart je nach Umfang des Projektes zu längeren Wartezeiten führt.
Eine Lösung wäre, die Website von einem anederen Server aus anzupingen um regelmäßige Requests durchzuführen.
Aber wenn man mit seinem Web beim Hoster ist, hat man normalerweise diese Möglichkeiten nicht zur Verfügung.
Die Lösung:
Ein Timer in der global.asax fragt regelmäßig die eigene Website ab.
Funktioniert zwar nicht direkt nach einem Reboot des Servers oder restart des IIS aber wenn dann eine Abfrage genmacht wurde, hätlt es immerhin bis...
Mit der folgenden Funktion kann man ermitteln, welches Control einen Postback ausgelöst hat.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Response.Write(getPostBackControl.ID)
End Sub
Private Function getPostBackControl() As Control
Dim ctlM As Control = Nothing
Dim ctl_Name As String = Page.Request.Params("__EVENTTARGET")
If ctl_Name IsNot Nothing AndAlso ctl_Name <> "" Then
ctlM = Page.FindControl(ctl_Name)
Else
Dim cx As Control = Nothing
Dim ctrlStr As String = ""
For Each ctl As String In Page.Request.Form
If ctl.EndsWith(".x") OrElse ctl.EndsWith(".y") Then
ctrlStr = ctl.Substring(0, ctl.Length - 2)
cx = Page.FindControl(ctrlStr)
Else
cx = Page.FindControl(ctl)
End If
If TypeOf cx Is System.Web.UI.WebControls.Button _
...
Immer wieder die große Frage, was diese Fehlermeldung bedeutet.
Nach wie vor habe ich dafür keine Erklärung und auch bisher keine negativen Auswirkungen gemerkt.
Nichtsdestotrotz füllt es immer wieder die Fehlerliste in ASP.NET Projekten.
Ein Workaround hierfür ist folgendes Modul im App_Code-Verzeichnis:
Public Module myModule
Public __o As Object
End Module
;-) Das ich da nicht früher drauf gekommen bin.
So ein trivialer Vorgang... und trotzdem noch nie gemacht.
Wie startet man ein Script in ASP.NET, das man zuvor im management Studio generiert hat.
Imports Microsoft.SqlServer.Management.Smo
Imports Microsoft.SqlServer.Management.Sdk.Sfc
Imports Microsoft.SqlServer.Management.Common
[....]
Dim SQL = File.ReadAllText("D:\_stromtip2005\SQLDATA\CreateDependencies.sql")
Dim sqlConnectionString As String = "Data Source=.\SQLExpress;Initial Catalog=CMS_2008_ST_DATA_32;Integrated Security=True"
Dim conn As New SqlConnection(sqlConnectionString)
Dim server As New Server(New ServerConnection(conn))
server.ConnectionContext.ExecuteNonQuery(SQL)
Jeder kennt es, ab und zu muß man dann doch HTML-Code im ´Hintergrund (z.B. für einen Email-Body) generieren und sückelt sich zu unübersichtlich zu Tode.
Mit dem XElement ist das kein Problem.
Man schreibt den HTML-Code wie im Markup-Editor und kann sogar Variablen wie im markup einbinden:
<%=meineVariable%>
Kein hantieren mit Anführungszeichen usw..
Im Zeitalter der Spamflut, geben auch die User Ihre Emailadresse nicht mehr an, wenn sie danach gefragt werden.
Mit der unten aufgelisteten Class EmailCheck kann man genau das prüfen.
Im Prinzip, ermittelt die Klasse den MX-Record der UserDomain und macht ein Helo am Mailserver und teilt dem Mailserver mit, dass wir eine Email für eine bestimmte Emailadresse haben. Existiert die Adresse nicht oder ist die Mailbox voll usw., so lehnt der Mailserver an dieser Stelle die Annahme ab und wir wissen, dass mit der Adresse etwas faul ist.
Lehnt der Mailserver an dieser Stelle die Annahme NICHT ab, so ist die Adresse...
Mit Visual Studio 2008 wurden auch die Assemblies des ADO.NET Sync Services installiert.
Mit Hilfe dieser API lassen sich (z.B. mobile) Anwendungen die nicht ständig mit der Datenbank verbunden sind einfach mit dem Server syncronisieren.
Mit Hilfe eines Assistenten kann man innerhalb weniger Minuten alle notwendigen Routinen und Trigger zur Aktualisierung der ClientDatenbank und der ServerDatenbank erstellen.
Auf Channel9 ist ein 18 Minuten Video von Daniel Moth für den Schnelleinstig mit dem Microsoft Sync Framework erschienen.
Den Assistenten kann man aufrufen in dem man ein neues Element "Local Database Cache" hinzufügt.
Im Code wird dann nur noch ein "syncAgent.Synchronize();" benötigt um die Synchronisierung durchzuführen.
Thomas Beckert hatte heute auf glengamoi.com das Problem, dass er bereits im Page_Load(ASP.NET) ein DataBind eines Repeaters durchführen musste.
Die Frage kam auf, ob dies dazu führt, dass die SQL-Abfrage evtl. mehrmals zum MSSQL geschickt wird.
Das wollte ich nun genau wissen.
In den Leistungstools des SQL-Servers gibt es den SQL Server Profiler mit dessen Hilfe man alle Aktivitäten und Abfragen auf dem SQLServer überwachen kann.
Die Antwort ist:
Beim einem Standard Aufruf macht dies keinen Unterschied. D.h. auch wenn im Page_Load ein Gridview1.DataBind() aufgerufen wird, wird nur eine Abfrage zum SQL-Server gesendet.
Die Abfrage wird unmittelbar vor dem...
Wenn man im DataGridViev in Windows Forms einen Datensatz mit den durch den Designer erstellten Einstellungen erstellt und automatisch aktualisiert, bekommt man in der Datenbank per default NULL-Values.
Um das zu verhindern, füge ich in Form_Load einen Event für TableNewRow hinzu, in dem ich wiederum die Defaultvalues setzen kan:
Private Sub Form_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Me.myDataSetTableAdapter.Fill(Me.myDataSet.myTablename) AddHandler myDataSet.Tables(0).TableNewRow, AddressOf newRowHandlerEnd SubSub newRowHandler(ByVal sender As Object, ByVal...
Mit folgendem Code kann man den in den Appsettings eingetragenen ConnectionString zur Laufzeit zu ändern:
My.MySettings.Default.Item (connectionName) = connectionString
Wenn der Connectionstring in der App.config gespeichert werden soll, hilft folgende Funktion:
Sub saveConnectionString(ByVal connectionName As String, _
ByVal connectionString As String)
Dim Config As Configuration
Dim Section As ConnectionStringsSection
Dim Setting As ConnectionStringSettings
Dim ConnectionFullName As String
ConnectionFullName = String.Format("{0}.My.MySettings.{1}", _
System.Reflection.Assembly.GetExecutingAssembly.GetName.Name, _
connectionName)
Config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
Section = CType(Config.GetSection("connectionStrings"), ConnectionStringsSection)
Setting = Section.ConnectionStrings(ConnectionFullName)
If IsNothing(Setting) Then Throw New Exception("Connection mit dem Namen " & _
connectionName & " nicht gefunden.")
Setting.ConnectionString = connectionString
Config.Save(ConfigurationSaveMode.Full)
'Hier wird der Connectionstring für die aktuelle Laufzeit geändert
My.MySettings.Default.Item(connectionName) = connectionString
End Sub
Um eine Datei mit dem unter Windows eingestellten Standardprogramm zu öffnen kann man System.Diagnostics.Process.Start benutzen:
If MessageBox.Show("Wollen Sie diese Datei öffnen?", _ "Datei öffnen", _ MessageBoxButtons.YesNo, _ MessageBoxIcon.Question) Then
System.Diagnostics.Process.Start(FullPathTextBox.Text)
End If
Nach dem Windowstate möchte ich nun auch die Spaltenbreiten und Reihenfolge der Spalten beim DataGridView speichern.
[Imports System.Collections.Specialized] Dim stringCollection As New System.Collections.SpecializedStringCollection() For Each column As DataGridViewColumn In Me.DataGridView1.Columns stringCollection.Add(String.Format("{0},{1},{2}", _ column.DisplayIndex, _ column.Width, column.Visible)) Next My.Settings.GridViewSetttings = stringCollection'Das Wiederherstellen...
Microsoft hat auch zwei Bücher zum kostenlosen download: Microsoft Visual Basic 2005 - Das Entwicklerbuch
Wobei man sich den zweiten Teil auch herunterladen kann, wenn man in der Download-URL Teil_1 durch Teil_2 ersetzt :-)
Alle Jahre wieder bin ich auf der Suche nach einem Tool oder Code, mit dem ich Verzeichnisstrukturen auslese.
mit diesem Minitool kann ich die Verzeichnisstruktur auslesen und in eine XML-Datei schreiben.
Und hier ist der Code dazu