Wenn die Muttersprache VB ist und C# nur Zweitsprache, dann passieren solche Sachen schon mal.
this.BindingContext.Item(MyDataSource).CancelCurrentEdit()
muss es natürlich sein... 🙂
Es geht ganz einfach:
Me.BindingContext.Item(MyDataSource).CancelCurrentEdit()
Hallo!
Ich habe ein Formular mit mehreren gebundenen Steuerelementen. Jetzt kriege ich über die BindingManagerBase (bzw. BindingContext) des Formulars ein DataRowView. Jetzt führe ich RejectChanges aus, es werden aber nicht die Steuerelement aktualisiert. Was kann man da machen?
Original von norman_timo
Hallo Druid!Ein DISTINCT schmeisst doch identische Resultate raus, bzw. übernimmt diese erst gar nicht, oder bin ich da verkehrt?
Dann würde nämlich ein DISTINCT, im Zusammenhang mit COUNT immer 1 oder 0 liefern, was ja beim Zählen ja nicht erwünscht wäre.
Ciao
Norman-Timo
Aha, und was macht dann der Group By? na klar der ist für Aggregratfunktionen aber auch um andere rauszuschmeissen, oder liege ich da total falsch?
Vielleicht DISTINCT nehmen? Ist vielleicht ein kleines bisschen schneller...
Ganz einfach:
In der 4.1 Version von MySQL gibts kein Currency mehr. Du musst die Currency in Decimal umwandeln.
Gruß Christian
Sorry, nur mal so nebenbei:
Kann der Nutzer den username eingeben?
Ich würde folgendes als Nutzername eingeben:
'; Delete * From accountbalance; Select * From accountbalance where user = '
Und swupps ist die Tabelle weg.
Möglich wäre auch:
' or 1=1 or user='
Verwende bitte Parameter.
-> Zu deinem Problem. Ich denke du musst die Currency in Decimal casten...
Du machst das mit einem Right bzw. Left Join der Primärschlüssel.
Keyword:
Stream -> MemoryStream
Zu Deutsch:
Lese das Image in einen MemoryStream ein. Dann kannst du diesen Stream in die Datenbank schreiben.
Original von norman_timo
Vorsicht! Hier kann ein so genanntes SQL-Injection Problem auftreten, denn wenn der Benutzer hier SQL-Code eingibt, so wird er ohne vorige überprüfung ausgeführt, und der Benutzer sollte so etwas nicht können 😉Deshalb solltest Du vorher eine Überprüfung des Textes in der Textbox machen.
Oder Parameter verwenden, bzw am besten sind Stored Procedures mit Parameterübergabe. Das ist ziemlich uncrackbar.
-->>
//requires a OleDbConnection object cn.
private OleDBCommand Com = new OleDBCommand("mysproc", cn);
private void ButtonHandler(object sender, System.EventArgs e){
//Muss nur einmal gesetzt werden.
Com.CommandType = CommandType.StoredProcedure;
Com.Parameters.Add(new OleDBParameter("@mypara", "myvalue");
//Weitere parameter hinzufügen...
Com.ExecuteNonQuery;
}
-->> Hoffe mein Source ist fehlerlos...
Lege dir doch eine static oder Singleton Klasse "Data" an. Da hast du eine static DataSet und die DataAdapter, etc.
Hallo!
Ich habe eine Stored Procedure in meiner Access und DB und würde nun gerne per OleDB Commandbuilder die Queries zusammen bauen lassen. Geht aber nicht, auch DeriveParameters schlägt fehl. Jemand Vorschläge?
ACHTUNG!
SQL INJECTION!
But what is it good for?
Wenn du z.B. .NET 1.1 verwendest dürfte dir aufgefallen sein, das du nicht überprüfen kannst ob ein Formular geladen wurde oder nicht.
Das kann man sehr schön mit einer Klasse regeln die eine HashTable hat.
Der HashKey bzw. Value ist dann der Name der Form.
Das Objekt ist dann die Form selber, so kann man diese auf bequem ansprechen.
[1 von 1000enden Beispielen]
Ok!
Aber dann ergibt sich noch folgendes Problem:
Validating wird IMMER ausgeführt. Ich will aber nur die Eingabe überprüfen bei Änderung. Heißt: Der neue Wert ist durchaus ein gültiger Wert, der Nutzer soll nur bestätigen, dass er die Änderung tätigen möchte.
Ja, sehr gute Idee. Nur das Problem: Wie reset(e) ich ein Column in einer DataRow?
Nein RejectChanges auf die Row will ich auf keinen Fall.
Genau. Eventuell noch das Schema mit ReadSchema festlegen.
Hallo!
Ich habe ein DataSet mit mehreren verknüpften Tabellen. Jetzt kann man mithilfe eines Formulares und einer Combobox in die Child Tabelle schreiben.
Ich möchte, dass eine Meldung mit Ja/Nein angezeigt wird ob der Eintrag wirklich geändert werden soll. Das Problem dabei ist wenn die DataRow changes dann ändert sich ja auch der Combobox inhalt.
Ich weiß nicht genau welches Event ich von der DataRow nehmen soll....
Vielen Dank im Vorraus.
Such auch mal bei Microsoft MSDN nach Webcasts, da findet man auch sehr gute Erklärungen.
Ich bin vielleicht blöde:
"Erst lesen, dann schreiben"...
Oledb?
Odbc?--> Bitte im richtigen Forum posten! Verschoben nach Datentechnologien.
WEDER OLEDB NOCH ODBC!!!
Finger weg davon! Es gibt doch extra einen .NET Datenbanktreiber von MySQL!
Runterladen (www.mysql.com) und installieren. Schon hat man die Xtra aus MySQL angepassten Klassen.
Schau dir mal die Methoden des DataRow Objektes an:
GetChildRows
GetParentRow
Das mit dem LATTENZAUN ist eigentlich von Access bekannt. Ich verweise einfach mal auf ein sehr ähnliches Problem im ActiveVB VB.NET Forum:
Ein Trigger ist eine sehr interessante Sache und ich kenne Ihn aus Firebird (ich arbeite nicht mit MS SQL).
So direkt für .NET und MS SQL habe ich nichts parat, aber das müsste dir auch weiterhelfen:
Ich würde doch den Trigger von MySQL so belassen.
Anstelle würde ich einen Button ins Formular packen mit "Aktualisieren".
Versuch mal Teradata....
🙂
Bei Access und der MSDE wärste dann mit 4 Datensätzen fertig und könntest keine neuen anlegen. 🙂
Auch bei SQL Server Express 2005 wird das teuer.
Außerdem:
Wenn das Programm mal die Datenbank laden soll, wie stellste dir die Ladezeiten vor?
Oder noch schlimmer: Stell dir mal vor du müsstest die häfte der Datensätz updaten....
Laufzeiten von einer Woche sollte man dann schon einplanen, selbst der beste Infineon Ram und der beste XEON streikt da.
Ne bei BLOBs war es ne ganz andere Idee, wie Rainbird es bereits sagte. Bestes Beispiel ist eine Datenbank in der Mitarbeiter und Ihre Bilder gespeichert werden.
500MB werden definitiv nicht passen.
Alternative:
Du kannst einen Link auf die Datei in der Datenbank speichern.
nichts!?
Weil DataAdapter1.Fill(DataTable1) führt bereits den zugewiesenen Select Command aus.
So spontan fällt mir nur ein, dass du dir mal die Schnittstellen im Collections Namespace anschauen solltest. Du musst (glaube ich) IList implementieren, aber das kann ich dir auch nicht 100%ig sagen.
mycomm.executenonquery muss weg und gib mal den kompletten pfad an (und nicht Datenbanken.mdb)
Wenn du einen DataAdapter nimmst solltest du nicht die Connection öffnen.
Das ist nämlich das ADO Prinzip: Es wird nur connected wenn Daten geändert oder abgerufen werden.
Also Connection nicht öffnen oder closen. Das macht schon der DataAdapter.
Klar kannst du erstmal den OleDB Namespace im System.Data Namespace nehmen aber was ist da schon großes dabei den MySQL Connector zu laden und einzubinden?
Übrigens, aber am leichtesten finde ich Firebird, denn die haben eine Connectionstringbuilder Klasse die ich sehr bevorzuge.
Hallo!
Ich habe eine Tabelle sagen wir mal mit Nachname und Vorname.
Jetzt sind die Nachnamen an eine Combobox gebunden (per DataView).
Jetzt gibt es ein zweites DataView für die Vornamen; hier wird jetzt ein RowFilter angewendet.
Wie kann ich jetzt alle doppelten Einträge filtern (bitte ohne weiteren Datenbankzugriff oder die Erstellung einer neuen DataTable).
Danke im Vorraus.
Generell gilt:
(Fast) Jedes Datenbank System hat seinen eigenen .NET Connector, den man auch am besten nutzen sollten.
Ist Keys.Enter nicht eine numerische Konstante für 13?
Dann muss doch noch gecastet werden, oder?
Hallo!
Gibt es ein VB Asc / Chr Pendant in C#?
Denke nicht, aber wie überprüfe ich beim KeyPress Ereignis ob die Enter Taste gedrückt wurde?
Ja, aber wie lernt man's sonst?
Ganz ohne Source geht's doch nicht.
Ok, gebe zu eine komplette Klasse zu posten war ein bissle viel.
Also erstmal:
Das ist noch lange nicht alles was man aus ADO.NET rausholen kann.
Ich wollte nur alles in die Wege leiten. Ich denke eben weils VB ist muss ein C# Programmierer da noch was lernen.
Sollte mit ADO.NET nicht so schwer sein.
Leider kann ich dir nicht sagen wie du eine Datenbank anlegst aber sonst sollte alles andere aus dem Beispiel ablesbar sein.
'//VB.NET Beispiel:
'//PS.: Run ist eine eigene Klasse fürs Log.
Imports System
Imports System.Data
Imports System.Data.OleDb
Imports Microsoft.VisualBasic
'//Imports -> using
''' -----------------------------------------------------------------------------
''' Project : DataExample
''' Class : Data
'''
''' -----------------------------------------------------------------------------
''' <summary>
''' This class is the connection between front and backend.
''' </summary>
''' <remarks>
''' </remarks>
''' <history>
''' [Christian Dernehl] 07.10.2005 Created
''' </history>
''' -----------------------------------------------------------------------------
Public Class Data
'/// Shared -> static
Public Shared dsData As New DataSet
Private Shared cn As New OleDbConnection
Private Shared com As New OleDbCommand
Private Shared da As New OleDbDataAdapter
Private Shared sConnectionstring As String = String.Empty
''' -----------------------------------------------------------------------------
''' <summary>
''' The connectionstring is needed to connect to the database.
''' </summary>
''' <value>
''' The connectionstring to the database.
''' </value>
''' <remarks>
''' You can use the Connectionstringbuilder class.
''' </remarks>
''' <history>
''' [Christian Dernehl] 07.10.2005 Created
''' </history>
''' -----------------------------------------------------------------------------
Public Shared Property Connectionstring() As String
'//Den Access Connectionstring findest du bei www.connectionstrings.com
Get
Return sConnectionstring
End Get
Set(ByVal Value As String)
sConnectionstring = Value
End Set
End Property
''' -----------------------------------------------------------------------------
''' <summary>
''' This sub fills the DataSet "dsData" with the data from the table "t_Daten".
''' If the table does not exist, a new one will be created.
''' </summary>
''' <remarks>
''' </remarks>
''' <history>
''' [Christian Dernehl] 07.10.2005 Created
''' </history>
''' -----------------------------------------------------------------------------
Public Shared Sub FillDataSet()
If sConnectionstring = String.Empty Then
Throw New Exception("Connectionstring has not been initialized!")
End If
Try
If Not cn.State = ConnectionState.Closed Then
cn.Close()
End If
cn.ConnectionString = Connectionstring
com.Connection = cn
com.CommandText = "SELECT ID, Vorname, Nachname FROM t_Daten ORDER BY Nachname, Vorname;"
'//Hier bitte eigenes SQL verwenden (google mal SQL Tutorial)
Try
'Create table if necessary
Dim dtMetaData As New DataTable
If cn.State = ConnectionState.Closed Then
cn.Open()
End If
dtMetaData = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
If Not cn.State = ConnectionState.Closed Then
cn.Close()
End If
Dim bfound As Boolean = False
For Each dr As DataRow In dtMetaData.Rows
If dr.Item("TABLE_NAME").ToString() = "t_Daten" Then
bfound = True
Exit For
End If
Next
If Not bfound Then
Dim comCreateNewTable As New OleDbCommand( _
"Create Table t_Daten( " & _
"ID integer not null Constraint ID Primary Key, " & _
"Vorname varchar(20), " & _
"Nachname varchar(20));", cn)
If cn.State = ConnectionState.Closed Then
cn.Open()
End If
comCreateNewTable.ExecuteNonQuery()
If Not cn.State = ConnectionState.Closed Then
cn.Close()
End If
End If
Catch oleex As OleDbException
MessageBox.Show("An error occured while creating tables! " & oleex.Message, "Connection", _
MessageBoxButtons.OK, MessageBoxIcon.Error, _
MessageBoxDefaultButton.Button1)
Run.WriteLog(oleex.Message)
Catch ex As Exception
MessageBox.Show("A critical error occured! " & ex.Message, _
"Critical Error", MessageBoxButtons.OK, MessageBoxIcon.Error, _
MessageBoxDefaultButton.Button1)
Run.WriteLog(ex.Message)
End Try
If dsData.Tables("tblData") Is Nothing Then
dsData.Tables.Add(New DataTable("tblData"))
End If
dsData.Tables("tblData").Clear()
da.SelectCommand = com
da.Fill(dsData.Tables("tblData"))
dsData.Tables("tblData").Columns(0).AutoIncrement = True
dsData.Tables("tblData").Columns(0).Unique = True
dsData.Tables("tblData").Columns(0).AutoIncrementSeed = _
dsData.Tables("tblData").Rows.Count
dsData.Tables("tblData").PrimaryKey = New DataColumn() {dsData.Tables("tblData").Columns(0)}
Catch oleex As OleDbException
MessageBox.Show("Error #" & oleex.ErrorCode & " occured! " & oleex.Message, _
"Data", MessageBoxButtons.OK, MessageBoxIcon.Error, _
MessageBoxDefaultButton.Button1)
Run.WriteLog(oleex.Message, oleex.ErrorCode)
Catch dx As DataException
MessageBox.Show("A data error occured! " & dx.Message, _
"Data", MessageBoxButtons.OK, MessageBoxIcon.Error, _
MessageBoxDefaultButton.Button1)
Run.WriteLog(dx.Message)
Catch ex As Exception
MessageBox.Show("A critical error occured! " & ex.Message, _
"Critical Error", MessageBoxButtons.OK, MessageBoxIcon.Error, _
MessageBoxDefaultButton.Button1)
Run.WriteLog(ex.Message)
End Try
End Sub
''' -----------------------------------------------------------------------------
''' <summary>
''' This sub updates the dataset "dsData". The commands for the database will be
''' generated with a commandbuilder.
''' </summary>
''' <remarks>
''' </remarks>
''' <history>
''' [Christian Dernehl] 07.10.2005 Created
''' </history>
''' -----------------------------------------------------------------------------
Public Shared Sub UpdateDataSet()
If sConnectionstring = String.Empty Then
Throw New Exception("Connectionstring has not been initialized!")
End If
Try
Dim combui As New OleDbCommandBuilder(da)
da.InsertCommand = combui.GetInsertCommand
da.DeleteCommand = combui.GetDeleteCommand
da.UpdateCommand = combui.GetUpdateCommand
Try
da.Update(dsData.Tables("tblData"))
Catch dx As DataException
MessageBox.Show("A error occured while updating data! " & dx.Message, _
"Data update", MessageBoxButtons.OK, MessageBoxIcon.Error, _
MessageBoxDefaultButton.Button1)
Run.WriteLog(dx.Message)
Catch ex As Exception
MessageBox.Show("A critical error occured while updating data! " & ex.Message, _
"Data update", MessageBoxButtons.OK, MessageBoxIcon.Error, _
MessageBoxDefaultButton.Button1)
Run.WriteLog(ex.Message)
End Try
Catch dx As DataException
MessageBox.Show("A error occured while setting up the SQL commands! " & dx.Message, _
"Data update", MessageBoxButtons.OK, MessageBoxIcon.Error, _
MessageBoxDefaultButton.Button1)
Run.WriteLog(dx.Message)
Catch ex As Exception
MessageBox.Show("A critical error occured while setting up the SQL commands! " & ex.Message, _
"Data update", MessageBoxButtons.OK, MessageBoxIcon.Error, _
MessageBoxDefaultButton.Button1)
Run.WriteLog(ex.Message)
End Try
End Sub
''' -----------------------------------------------------------------------------
''' <summary>
''' This sub updates the dataset without settting up the commands. With the subs
''' SetInsertCommand, SetDeleteCommand and SetUpdateCommand you can set up the
''' commands yourself.
''' </summary>
''' <remarks>
''' </remarks>
''' <history>
''' [Christian Dernehl] 07.10.2005 Created
''' </history>
''' -----------------------------------------------------------------------------
Public Shared Sub UpdateDataSetManually()
Try
da.Update(dsData)
Catch dx As DataException
Throw New DataException(dx.Message)
Catch ex As Exception
Throw New Exception(ex.Message)
End Try
End Sub
#Region " Set Commands manually "
''' -----------------------------------------------------------------------------
''' <summary>
''' In order to have your own command you can set up your own SQL insert command.
''' </summary>
''' <param name="Command">
''' The SQL insert command.
''' </param>
''' <remarks>
''' </remarks>
''' <history>
''' [Christian Dernehl] 07.10.2005 Created
''' </history>
''' -----------------------------------------------------------------------------
Public Overloads Shared Sub SetInsertCommand(ByVal Command As OleDbCommand)
da.InsertCommand = Command
End Sub
''' -----------------------------------------------------------------------------
''' <summary>
''' In order to have your own command you can set up your own SQL insert command.
''' </summary>
''' <param name="Command">
''' The SQL insert commandtext.
''' </param>
''' <remarks>
''' </remarks>
''' <history>
''' [Christian Dernehl] 07.10.2005 Created
''' </history>
''' -----------------------------------------------------------------------------
Public Overloads Shared Sub SetInsertCommand(ByVal CommandText As String)
da.InsertCommand = New OleDbCommand(CommandText, cn)
End Sub
''' -----------------------------------------------------------------------------
''' <summary>
''' In order to have your own command you can set up your own SQL update command.
''' </summary>
''' <param name="Command">
''' The SQL update command.
''' </param>
''' <remarks>
''' </remarks>
''' <history>
''' [Christian Dernehl] 07.10.2005 Created
''' </history>
''' -----------------------------------------------------------------------------
Public Overloads Shared Sub SetUpdateCommand(ByVal Command As OleDbCommand)
da.UpdateCommand = Command
End Sub
''' -----------------------------------------------------------------------------
''' <summary>
''' In order to have your own command you can set up your own SQL update command.
''' </summary>
''' <param name="Command">
''' The SQL update commandtext.
''' </param>
''' <remarks>
''' </remarks>
''' <history>
''' [Christian Dernehl] 07.10.2005 Created
''' </history>
''' -----------------------------------------------------------------------------
Public Overloads Shared Sub SetUpdateCommand(ByVal CommandText As String)
da.UpdateCommand = New OleDbCommand(CommandText, cn)
End Sub
''' -----------------------------------------------------------------------------
''' <summary>
''' In order to have your own command you can set up your own SQL delete command.
''' </summary>
''' <param name="Command">
''' The SQL delete command.
''' </param>
''' <remarks>
''' </remarks>
''' <history>
''' [Christian Dernehl] 07.10.2005 Created
''' </history>
''' -----------------------------------------------------------------------------
Public Overloads Shared Sub SetDeleteCommand(ByVal Command As OleDbCommand)
da.DeleteCommand = Command
End Sub
''' -----------------------------------------------------------------------------
''' <summary>
''' In order to have your own command you can set up your own SQL delete command.
''' </summary>
''' <param name="Command">
''' The SQL delete commandtext.
''' </param>
''' <remarks>
''' </remarks>
''' <history>
''' [Christian Dernehl] 07.10.2005 Created
''' </history>
''' -----------------------------------------------------------------------------
Public Overloads Shared Sub SetDeleteCommand(ByVal CommandText As String)
da.DeleteCommand = New OleDbCommand(CommandText, cn)
End Sub
#End Region
End Class
Also sagen wir mal so:
Wenn du das SP2 als Datei runterlädts ist das Framework nicht dabei. Wenn du es aber Windows Update runterläds wird optional angeboten. (Soweit ich weiß).
Jau hast recht!
Ich habe bei meinem Windows "Klassisch" eingestellt und daher nichts gemerkt.
Hallo ich habe VS 2003 Prof. Academic und habe folgendes Problem:
Ich möchte einen Button der ein Bild anzeigt.
Es ist wirklich nicht einfach. Ich habe folgendes schon probiert:
Über die Image, ImageIndex(mit ImageList) und über die BackgroundImage Eigenschaft in der IDE das Problem zu lösen. Nix passiert bei .gif, .jpg und bei .bmp wenn das Programm ausgeführt wird (egal ob debug oder release) aber in der IDE sind die Icons auf den Buttons.
Ich habe sogar versuch ein Label mit einem Image zu versehen (klappt) und dann einfach das zu kopieren und in den Button zu legen. Klappt auch nicht.
Gibts da was besonders, oder muss man sich einen eigenen Button programmieren?
Ich frage mich wirklich warum ich bei einem 30KB Programm .NET benötige. Das macht man doch in Assembler. LOL