PDA

Bekijk Volledige Versie : OleDbType.Numeric (valuta) asp.net



gandert
09/07/07, 15:36
Beste,

Ik heb al redelijk wat insert formulieren gemaakt in asp.net (visual basics) om zo gegevens in te vullen in mijn ACCESS database.

Tot nu toe heb ik vooral gewerkt met gewone Text (Varchar) gegevens.

Nu had ik graag een Valuta tekst invullen maar ik krijg steeds de foutcode:

Failed to convert parameter value from a String to a Decimal.


Hieronder geef ik je het stukje code die ik denk die moet aangepast worden:


objCmd.Parameters.Add("@bedrag", OleDbType.Numeric)
objCmd.Parameters("@bedrag").Value = bedrag.Text

Hieronder een werkende text varchar type:


objCmd.Parameters.Add("@beschrijving", OleDbType.VarChar)
objCmd.Parameters("@beschrijving").Value = beschrijving.Text

Zal ook mijn complete code even doorgeven (deze is wel redelijk lang):


Imports System.Data
Imports System.Data.OleDb

Partial Class uitvoer
Inherits System.Web.UI.Page

Dim strCn, strSql As String
Dim intId, intFKid As Integer

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
strCn = ConfigurationManager.ConnectionStrings("vervaet").ConnectionString




' ##
strCn = ConfigurationManager.ConnectionStrings("vervaet").ConnectionString
If IsToegelaten(User.Identity.Name) = False Then
' De gebruuiker mag deze pagina niet zien
'lblBoodschap.Text = "fout"

' of
Response.Redirect("Default.aspx")
' Else
' ' De gebruiker mag deze pagina wel zien
' lblBoodschap.Text = "Goed"
End If
' ###





' Indien een bestaand record opgevraagd wordt zullen de gegevens uit de DB
' gehaald en getoont worden.

If Not Page.IsPostBack Then
If Request.QueryString("id") <> "" Then
' Er werd een id doorgegeven
intId = CType(Request.QueryString("id"), Integer)
id.Text = intId.ToString

If Not Page.IsPostBack Then
uitvoerenById(intId)
End If
End If
End If


intFKid = CType(Request.QueryString("FKid"), Integer)


FKid.Text = intFKid








End Sub




' ###
Private Function IsToegelaten(ByVal Username As String) As Boolean
Dim objCn As New System.Data.OleDb.OleDbConnection(strCn)
objCn.Open()

strSql = "SELECT * FROM users Where Username = @Username AND admin = True;"
Dim objCmd As New Data.OleDb.OleDbCommand(strSql, objCn)

Dim objDa As New Data.OleDb.OleDbDataAdapter(objCmd)
Dim objDs As New Data.DataSet
objCmd.Parameters.Add("@Username", Data.OleDb.OleDbType.VarChar, 15)
objCmd.Parameters("@Username").Value = Username

objDa.Fill(objDs, "users")

If objDs.Tables("users").Rows.Count >= 1 Then
' rechten toegestaan
Return True
Else
' rechten niet toegestaan
Return False
End If
End Function
' ###




Protected Sub bewaar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles bewaar.Click
Dim objCn As New System.Data.OleDb.OleDbConnection(strCn)
objCn.Open()

If id.Text <> "" Then
' Bestaand record => update
strSql = "UPDATE uitvoeren SET stand = @stand, " _
& "FKid = @FKid, " _
& "beschrijving = @beschrijving, " _
& "datum = @datum, " _
& "bedrag = @bedrag, " _
& "uitvoerdatum = @uitvoerdatum, " _
& "commissie = @commissie, " _
& "verkoopdatum = @verkoopdatum, " _
& "verkoper = @verkoper, " _
& "uitvoer = @uitvoer " _
& "WHERE id = @id; "
Else
' Nieuw record => Insert

strSql = "INSERT INTO uitvoeren(stand, FKid, beschrijving, datum, bedrag, uitvoerdatum, commissie, verkoopdatum, verkoper, uitvoer) " _
& "VALUES(@stand,@FKid,@beschrijving,@datum,@bedrag,@ uitvoerdatum,@commissie,@verkoopdatum,@verkoper,@u itvoer);"
End If

Dim objCmd As New System.Data.OleDb.OleDbCommand(strSql, objCn)
objCmd.Parameters.Clear()

objCmd.Parameters.Add("@stand", OleDbType.VarChar)
objCmd.Parameters("@stand").Value = stand.Text


objCmd.Parameters.Add("@FKid", OleDbType.Integer)
objCmd.Parameters("@FKid").Value = CType(FKid.Text, Integer)

objCmd.Parameters.Add("@beschrijving", OleDbType.VarChar)
objCmd.Parameters("@beschrijving").Value = beschrijving.Text



objCmd.Parameters.Add("@datum", OleDbType.Date)
If (Me.DatePickerDatum.IsNull) Then
objCmd.Parameters("@datum").Value = System.DBNull.Value

Else
objCmd.Parameters("@datum").Value = Me.DatePickerDatum.SelectedDate
End If


objCmd.Parameters.Add("@bedrag", OleDbType.Numeric)
objCmd.Parameters("@bedrag").Value = bedrag.Text

objCmd.Parameters.Add("@uitvoerdatum", OleDbType.Date)
If (Me.DatePickerUitvoerdatum.IsNull) Then
objCmd.Parameters("@uitvoerdatum").Value = System.DBNull.Value

Else
objCmd.Parameters("@uitvoerdatum").Value = Me.DatePickerUitvoerdatum.SelectedDate
End If


objCmd.Parameters.Add("@commissie", OleDbType.Numeric)
objCmd.Parameters("@commissie").Value = commissie.Text



objCmd.Parameters.Add("@verkoopdatum", OleDbType.Date)
If (Me.DatePickerVerkoopdatum.IsNull) Then
objCmd.Parameters("@verkoopdatum").Value = System.DBNull.Value

Else
objCmd.Parameters("@verkoopdatum").Value = Me.DatePickerVerkoopdatum.SelectedDate
End If


objCmd.Parameters.Add("@verkoper", OleDbType.VarChar)
objCmd.Parameters("@verkoper").Value = verkoper.Text

objCmd.Parameters.Add("@uitvoer", OleDbType.VarChar)
objCmd.Parameters("@uitvoer").Value = uitvoer.Text



If ID.Text <> "" Then
' parameter voor id aanmaken
objCmd.Parameters.Add("@id", OleDbType.Integer)
objCmd.Parameters("@id").Value = CType(ID.Text, Integer)
End If

Try
objCmd.ExecuteNonQuery()
Catch ex As Exception
boodschap.ForeColor = Drawing.Color.Red
boodschap.Text = "Er trad een fout op bij het bewaren van de gegevens.<br />" & ex.Message
Exit Sub
Finally
If objCn.State = Data.ConnectionState.Open Then
objCn.Close()
End If
End Try

' Indioen nodig de nieuwe id ophalen voor verdere verwerking
If ID.Text = "" Then
ID.Text = GetHighestId().ToString
AccessDataSourceAfspraak.DataBind()
GridView1.DataBind()
End If

If FKid.Text = "" Then
FKid.Text = intFKid
AccessDataSourceAfspraak.DataBind()
GridView1.DataBind()
End If

boodschap.ForeColor = Drawing.Color.Green
boodschap.Text = "De gegevens zijn bewaard."

End Sub


Private Function GetHighestId() As Integer
Dim objCn As New System.Data.OleDb.OleDbConnection(strCn)
objCn.Open()

strSql = "SELECT MAX(AFid) AS Hoogste FROM uitvoeren;"

Dim objCmd As New OleDbCommand(strSql, objCn)
Dim objDa As New OleDbDataAdapter(objCmd)
Dim objDs As New Data.DataSet

objDa.Fill(objDs, "max")

If objCn.State = Data.ConnectionState.Open Then
objCn.Close()
End If

If objDs.Tables("max").Rows.Count <> 0 Then
Return objDs.Tables("max").Rows(0).Item("Hoogste")
Else
Return -1
End If

End Function

Private Sub uitvoerenById(ByVal intLocalId As Integer)
Dim objCn As New System.Data.OleDb.OleDbConnection(strCn)
objCn.Open()

strSql = "SELECT * FROM uitvoeren WHERE id = @id;"

Dim objCmd As New OleDbCommand(strSql, objCn)
objCmd.Parameters.Add("@id", OleDbType.Integer)
objCmd.Parameters("@id").Value = intLocalId

Dim objDa As New OleDbDataAdapter(objCmd)
Dim objDs As New Data.DataSet

objDa.Fill(objDs, "uitvoeren")

If objCn.State = Data.ConnectionState.Open Then
objCn.Close()
End If

' Plaats de gegevens van het prospectrecord in de tekstvakken
If objDs.Tables("uitvoeren").Rows.Count > 0 Then
id.Text = objDs.Tables("uitvoeren").Rows(0).Item("id").ToString
stand.Text = objDs.Tables("uitvoeren").Rows(0).Item("stand").ToString
FKid.Text = objDs.Tables("uitvoeren").Rows(0).Item("FKid").ToString
beschrijving.Text = objDs.Tables("uitvoeren").Rows(0).Item("beschrijving").ToString
DatePickerDatum.SelectedValue = objDs.Tables("uitvoeren").Rows(0).Item("datum")
bedrag.Text = objDs.Tables("uitvoeren").Rows(0).Item("bedrag").Decimal
DatePickerUitvoerdatum.SelectedValue = objDs.Tables("uitvoeren").Rows(0).Item("uitvoerdatum")
commissie.Text = objDs.Tables("uitvoeren").Rows(0).Item("commissie").Decimal
DatePickerVerkoopdatum.SelectedValue = objDs.Tables("uitvoeren").Rows(0).Item("verkoopdatum")
verkoper.Text = objDs.Tables("uitvoeren").Rows(0).Item("verkoper").ToString
uitvoer.Text = objDs.Tables("uitvoeren").Rows(0).Item("uitvoer").ToString

Else
boodschap.ForeColor = Drawing.Color.Red
boodschap.Text = "De gevraagde gegevens werden niet gevonden."
End If

End Sub

Protected Sub verwijder_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles verwijder.Click
intId = CType(id.Text, Integer)

Dim objCn As New System.Data.OleDb.OleDbConnection(strCn)
objCn.Open()

strSql = "DELETE FROM uitvoeren WHERE id = @id;"

Dim objCmd As New System.Data.OleDb.OleDbCommand(strSql, objCn)
objCmd.Parameters.Clear()

' parameter voor id aanmaken
objCmd.Parameters.Add("@id", OleDbType.Integer)
objCmd.Parameters("@id").Value = intId

Try
objCmd.ExecuteNonQuery()
Catch ex As Exception
boodschap.ForeColor = Drawing.Color.Red
boodschap.Text = "Er trad een fout op bij het verwijderen van de gegevens.<br />" & ex.Message
Exit Sub
Finally
If objCn.State = Data.ConnectionState.Open Then
objCn.Close()
End If
End Try

Response.Redirect("Default.aspx")
End Sub

Protected Sub nieuw_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles nieuw.Click
'Response.Redirect("afspraak.aspx")
' Formulier in status voor nieuwe ingave brengen
id.Text = ""
stand.text = ""
FKid.Text = intFKid
beschrijving.Text = ""
DatePickerDatum.SelectedValue = ""
bedrag.Text = ""
DatePickerUitvoerdatum.SelectedValue = ""
commissie.Text = ""
DatePickerVerkoopdatum.SelectedValue = ""
verkoper.Text = ""
uitvoer.Text = ""





End Sub
End Class


Gelieve me te helpen want op google vind ik niets.

mvg
Gandert

Mikej0h
09/07/07, 18:15
In het kort gaat het erom dat je probeert een String weg te schrijven, terwijl hij daar een ander DataType verwacht (decimal).

Je code zal eerder er zo uit moeten zien:


objCmd.Parameters.Add("@bedrag", OleDbType.Numeric)
objCmd.Parameters("@bedrag").Value = Convert.ToDecimal(bedrag.Text)


Even zeker wetende dat er altijd een decimal value in zit (dus geen lege waardes of 'gewone' characters).

Succes...