Man kann natürlich auch TSQL mit dem Entity Framework direkt benutzen.
Das ganze funktioniert folgendermaßen:
Dim Con As EntityClient.EntityConnection = Ctx.Connection
Dim Conn = Con.StoreConnection
Dim Stat = Conn.State
If Not Stat = ConnectionState.Open Then Conn.Open()
Using Cmd = Conn.CreateCommand
Cmd.CommandText = Sql.ToString
Cmd.ExecuteNonQuery()
End Using
If Not Stat = ConnectionState.Open Then Conn.Close()
26eb6c04-ff6a-4993-a514-9b959f2ae9ee|1|5.0
Wenn Sonderzeichen, die z.B. aus einem Silverlight-Control kommen, noch numerische HTML Entities haben, also sowas wie “ü”, kann man das mit folgender Funktion in echte ANSI Zeichen konvertieren:
Public Shared Function CleanNumericEntities(ByVal InText As String) As String
Return Regex.Replace(InText, "&#\d{3};", New MatchEvaluator(AddressOf ReplaceNumericHTML))
End Function
Private Shared Function ReplaceNumericHTML(ByVal Ma As Match) As String
Dim Val = Ma.Value.Substring(2, 3)
If IsNumeric(Val) Then Return Chr(Val)
Return "?"
End Function
6623a3df-4675-4bf0-9a83-bd457381146c|0|.0
in einem Silverlight Projekt hatten wir die Notwendigkeit, eine Textbox zu benutzen, die nur die Eingabe einer Fliesskommazahl (in dem Fall eines Währungwertes) zu erlauben.
Da wir nicht dringend eine externe Komponente einsetzen wolllten habe ich das Problem mit folgendem Code gelösst:
Dabei wird im New-Event des Controls ein KeyDown-Event an die Textbox gebunden, der bei jesem Tastendruck überprüft, ob es ein für eine Fliesskommazahl gültiges Zeichen ist.
Leider ist das “,” nicht in der Key Enumeration, und muss händisch über den KeyCode abgehandelt werden. Dabei ist zu beachten, dass das “,” in 3 Varianten abgefragt werden muss: normales “,”, Zehnertastatus und auf dem Mac gibts (wie sollte es anders sein) einen anderen Zahlencode für das “,”.
und hier der Codesnippet:
Public Sub New()
InitializeComponent()
AddHandler tbTbx.KeyDown, AddressOf OnlyNumbers
End Sub
Public Sub OnlyNumbers(ByVal sender As Object, ByVal e As KeyEventArgs)
Select Case e.Key
Case Key.Tab
Return
Case Key.D0
Case Key.D1
Case Key.D2
Case Key.D3
Case Key.D4
Case Key.D5
Case Key.D6
Case Key.D7
Case Key.D8
Case Key.D9
Case Key.NumPad0
Case Key.NumPad1
Case Key.NumPad2
Case Key.NumPad3
Case Key.NumPad4
Case Key.NumPad5
Case Key.NumPad6
Case Key.NumPad7
Case Key.NumPad8
Case Key.NumPad9
Case Key.Decimal ' ,
Case Else
Select Case e.PlatformKeyCode
Case 188, 110, 43 ' ",", ", Numpad" , ", Mac"
If tbTbx.Text.IndexOf(",") > -1 Then
e.Handled = True
Return
End If
Case Else
e.Handled = True
Return
End Select
End Select
End Sub
497ad4e4-f9e3-473d-9a69-b725fb1604eb|0|.0
Für die Benutzung von SEO freundlichen URLs (Search Engine Optimisation) benutze ich das URL Rewriting Modul des IIS (-> http://www.iis.net/extensions/URLRewrite).
Wenn nun ein Datapager z.B. an ein Listview Control gebunden wird, benutzt dieser leider als Linkadresse nicht die “schöne” URL, sondern die aus dem Rewriting entstehende URL.
Man kann dem Datapager aber mit dieser Funktion die neuen (schönen) Links beibringen:
Private Sub FixPagerURLs(ByVal Pager As DataPager)
For Each Pag As DataPagerFieldItem In Pager.Controls
For Each Ctrl In Pag.Controls
If TypeOf Ctrl Is HyperLink Then
Dim Hyp As HyperLink = Ctrl
Dim Req = Hyp.NavigateUrl.Replace(Request.Path, "").Replace("?", "")
Dim Params = Req.Split("&")
Dim NewPage = (From item In Params Where item.StartsWith("page")).FirstOrDefault
Dim URL = Request.RawUrl
If URL.Contains("?") Then URL = URL.Substring(0, URL.IndexOf("?"))
If NewPage = "page=1" Then
Hyp.NavigateUrl = URL
Else
Hyp.NavigateUrl = String.Concat(URL, "?", NewPage)
End If
End If
Next
Next
End Sub
und den dann im DataBound Event des Listview aufrufen:
Die Idee dazu habe ich von dieser Webseite:
http://blog.anasghanem.com/post/Programmatically-Modifying-the-HyperLinks-in-the-DataPager-control.aspx
975765dc-a6ab-4772-9930-c07023197a08|0|.0
Wenn man eine List(of Integer) in ein String umwandeln möchte, benötigt man zuerst einen Helper, der die Formatierung eines einzelnen Items vornimmt:
Private Shared Function I2S(ByVal Nummer As Integer) As String
Return Nummer.ToString
End Function
und diesen kann man dann benutzen, um eine komplette Liste in das gewünschte Zielformat zu konvertieren:
Dim Arr1 as New List(of Integer)
Dim Arr2 As List(Of String) = Arr1.ConvertAll(New Converter(Of Integer, String)(AddressOf I2S))
Return String.Join(", ", Arr2.ToArray)
05b1401c-8f4c-4bcf-a250-cdc85affcad3|0|.0
Wenn man Daten über eine Webseite zu Excel exportieren will, geht das eigentlich ganz einfach, indem man eine HTML Seite ausgibt, die eine Tabelle enthält, und dann den Contentyp setzt.
Dazu kann man noch den Tabellenzellen bestimmte CSS Attribute mitgeben, so dass die dann von Excel auch passent erkannt werden.
Hier mal ein ganz grober Dummy, der aber das Vorgehen veranschaulicht:
Response.Clear()Response.ClearHeaders()Response.ContentEncoding = Encoding.DefaultResponse.Buffer = TrueResponse.ContentType = "application/vnd.ms-excel"Response.AddHeader("Content-Disposition", "inline; filename=Statistik.xls")Dim Out As New StringBuilderOut.Append("<html>")Out.Append("<style>")Out.Append("body,th,td{font-size:10px;font-family:arial;color:black;}")Out.Append("table{mso-displayed-decimal-separator:""\,"";mso-displayed-thousand-separator:""\."";}")Out.Append("td{padding-top:1px;padding-right:1px;padding-left:1px;mso-ignore:padding;color:black;font-size:10.0pt;font-weight:400;font-style:normal;text-decoration:none;font-family:Calibri,sans-serif;mso-font-charset:0;mso-number-format:General;text-align:left;vertical-align:top;mso-background-source:auto;mso-pattern:auto;white-space:normal;}")Out.Append(".th{background:#d8d8d8;font-size:10px;font-family:arial;color:black;mso-pattern:black none;}")Out.Append(".date{mso-number-format:""Short Date"";}")Out.Append("</style>")Out.Append("<body>")Out.Append("<table>")Out.Append("<tr>")Out.Append("<td class='.date' align='left'>7.4.2009</th>")Out.Append("</tr>")Out.Append("</table>")Out.Append("</body>")Out.Append("</html>")Response.Write(Out.ToString)Response.End()
Folgende Formatierungsmöglichkeiten hat man für mso-number-format:
"0" NO Decimals "0\.000" 3 Decimals "\#\,\#\#0\.000" Comma with 3 dec "mm\/dd\/yy" Date7 "mmmm\ d\,\ yyyy" Date9 "m\/d\/yy\ h\:mm\ AM\/PM" D -T AMPM "Short Date" 01/03/1998 "Medium Date" 01-mar-98 "d\-mmm\-yyyy" 01-mar-1998 "Short Time" 5:16 "Medium Time" 5:16 am "Long Time" 5:16:21:00 "Percent" Percent - two decimals "0%" Percent - no decimals "0\.E+00" Scientific Notation "\@" Text "\#\ ???\/???" Fractions - up to 3 digits (312/943) "\0022£\0022\#\,\#\#0\.00" £12.76 "\#\,\#\#0\.00_ \;\[Red\]\-\#\,\#\#0\.00\ " 2 decimals, negative numbers in red and signed (1.56 -1.56)
6113bb6c-9995-461c-b33f-3a6247497baf|1|5.0
Ich hatte das Problem, zu einem bestehenden XML noch weitere Elemente hinzufügen zu müssen. Das XML war als String im System vorhanden, und da hab ich das ganze per LINQ gelösst:
Als erstes muss folgender Namespace als Referenz im Projekt eingebunden, und in der entsprechenden Klasse importiert sein:
Imports System.Xml.Linq
und dann funktioniert das ganze recht einfach so:
Dim Doc As XDocument = XDocument.Parse(XmlString)Dim Root As XElement = Doc.Element("root")Dim xNewElement As New XElement("newnode")xNewElement.Value = MyValuexNewElement.SetAttributeValue("id", MyID)Root.AddxNewElementReturn Doc.ToString
553dae36-4986-41a5-8bba-c24a55ea926a|0|.0
Neulich hatte ich das Problem, dass ich hier lokal auf dem SQL Server 2008 entwickel, aber unsere Livesysteme noch den SQL Server 2005 haben.
Das ist im grossen und ganzen ja kein Problem, allerdings versucht das Mapping-Tool vom Entity Framework immer das Datenbankschema zu benutzen, dass bei der Entwicklung benutzt worden ist, wass dann zu solchen Fehlern führt:
- Serverfehler in der Anwendung /.
- Die verwendete SQL Server-Version unterstützt nicht den Datentyp
- Beschreibung: Unbehandelte Ausnahme beim Ausführen der aktuellen Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über diesen Fehler anzuzeigen und festzustellen, wo der Fehler im Code verursacht wurde.
-
- Ausnahmedetails: System.ArgumentException: Die verwendete SQL Server-Version unterstützt nicht den Datentyp
Serverfehler in der Anwendung /.Die verwendete SQL Server-Version unterstützt nicht den Datentyp 'datetime2'.Beschreibung: Unbehandelte Ausnahme beim Ausführen der aktuellen Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über diesen Fehler anzuzeigen und festzustellen, wo der Fehler im Code verursacht wurde.Ausnahmedetails: System.ArgumentException: Die verwendete SQL Server-Version unterstützt nicht den Datentyp 'datetime2'.
Man kann aber das Visual Studio auch dazu bringen, den Code für den 2005’er zu kompilieren, indem man das .edmx im Texteditor öffnet, und ganz am Anfang das Attribut ProviderManifestToken von “2008” zu “2005” ändert. neu Builden, und … na meistens kommt dann so ein Fehler:
- Serverfehler in der Anwendung /.
- --------------------------------------------------------------------------------
-
- Das angegebene Schema ist ungültig. Fehler:
- Model1.ssdl(108,6) : Fehler 0040: Typ date ist nicht mit einem Namespace oder Alias qualifiziert. Nur PrimitiveTypes können ohne Qualifizierung verwendet werden.
- Beschreibung: Unbehandelte Ausnahme beim Ausführen der aktuellen Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über diesen Fehler anzuzeigen und festzustellen, wo der Fehler im Code verursacht wurde.
-
- Ausnahmedetails: System.Data.MetadataException: Das angegebene Schema ist ungültig. Fehler:
- Model1.ssdl(108,6) : Fehler 0040: Typ date ist nicht mit einem Namespace oder Alias qualifiziert. Nur PrimitiveTypes können ohne Qualifizierung verwendet werden.
-
- Quellfehler:
-
- Beim Ausführen der aktuellen Webanforderung wurde einen unbehandelte Ausnahme generiert. Informationen über den Ursprung und die Position der Ausnahme können mit der Ausnahmestapelüberwachung angezeigt werden.
Serverfehler in der Anwendung /.--------------------------------------------------------------------------------Das angegebene Schema ist ungültig. Fehler: Model1.ssdl(108,6) : Fehler 0040: Typ date ist nicht mit einem Namespace oder Alias qualifiziert. Nur PrimitiveTypes können ohne Qualifizierung verwendet werden.Beschreibung: Unbehandelte Ausnahme beim Ausführen der aktuellen Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über diesen Fehler anzuzeigen und festzustellen, wo der Fehler im Code verursacht wurde. Ausnahmedetails: System.Data.MetadataException: Das angegebene Schema ist ungültig. Fehler: Model1.ssdl(108,6) : Fehler 0040: Typ date ist nicht mit einem Namespace oder Alias qualifiziert. Nur PrimitiveTypes können ohne Qualifizierung verwendet werden.Quellfehler: Beim Ausführen der aktuellen Webanforderung wurde einen unbehandelte Ausnahme generiert. Informationen über den Ursprung und die Position der Ausnahme können mit der Ausnahmestapelüberwachung angezeigt werden.
Tataaaaa…. jetzt muss man noch (wieder im .edmx und per Textedior ) alle Type="date” in Type="datetime" ändern, und dann sollte es aber funktionieren.
Ich habe diesen Tipp hier gefunden
3c8f755b-4994-4ea0-9c09-463f8d1a1d0d|0|.0
In einem Projekt benutze ich das Microsoft Entity Framework um Daten aus der Datenbank an ein Gridview zu binden.
Nun will ich aber zeilenweise bestimmte Zellen ausblenden, wenn das Datenobjekt z.B. bestimmte Arten von Eigenschaften/Kindern hat.
Um im RowDataBound Handler des Gridview aber das jewilige Entity zu bekommen, benötigt man eine kleine Hilfsfunktion:
Public Function GetRowItem(Of TEntity As Class)(ByVal dataItem As Object) As TEntity Dim Entity = TryCast(dataItem, TEntity) If Entity IsNot Nothing Then Return Entity Dim td = TryCast(dataItem, ComponentModel.ICustomTypeDescriptor) If td IsNot Nothing Then Return DirectCast(td.GetPropertyOwner(Nothing), TEntity) Return NothingEnd Function
Danach kann man dann in der RowDataBound folgenden Code benutzen, um die Entität (in meinem Fall fom Typ "Attribute”) zu bekommen:
Private Sub gvAttribs_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvAttribs.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then Dim Attrib = GetRowItem(Of Attribute)(e.Row.DataItem) '-- Und hier gehts dann weiter ... End IfEnd Sub
Ich habe diesen Hinweis im MSDN Social gefunden.
d5922ab8-f07b-4e97-9fbd-d5758bf3a8cc|0|.0
Wenn die im Filesystem liegenden Dateien nach dem Änderungsdatum sortiert ausgegeben werden sollen, muss man sich zuerst einen kleinen Helper schreiben, der die Sortierung übernimmt:
Public Class Sorter
Implements IComparer
Public Function CompareDesc(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
Dim F1 As FileInfo = DirectCast(x, FileInfo)
Dim F2 As FileInfo = DirectCast(y, FileInfo)
CompareDesc = DateTime.Compare(F1.LastWriteTime, F2.LastWriteTime)
End Function
End Class
dann kann man die Files folgendermassen sortieren und z.B. in einer Dropdown Liste ausgeben:
Dim Dir As New DirectoryInfo("d:\import")
Dim Files() As FileInfo = Dir.GetFiles("*.jpg")
Array.Sort(Files, New Sorter)
ddlFiles.Items.Clear()
For Each FI As FileInfo In Files
ddlFiles.Items.Add(New ListItem(String.Format("{0:dd}.{0:MM}.{0:yy} {0:HH}:{0:mm} - {1}", FI.LastWriteTime, FI.Name), FI.FullName))
Next
Diesen Hinweis habe ich hier gefunden.
f96f3daa-54b4-46a9-885b-a955507e5e3e|0|.0