Avatar billede dcasso Nybegynder
30. august 2004 - 10:49 Der er 2 kommentarer og
1 løsning

SQL: Data type mismatch in criteria expression

I det originale asp syntes jeg det var utrolig let at fastlægge, hvor en sådan fejl opstod. Dette føler jeg er blevet mere kompleks i .net.

Et eksempel er nedenstående, som jeg er kørt fast i. Jeg føler jeg har tjekket værdierne som overføres efter en 5-6 gange og kan ikke se nogen direkte fejl.

Er der en der kan se, hvad fejlen skyldes og meget gerne komme med lidt vejledning til, hvordan man lettest debugger SQL inserts fejl i asp.net, for jeg føler godt nok det er noget mere tidskrævende end i trad. asp.

Line 65:            dbConnection.Open
Line 66:            Try
Line 67:                rowsAffected = dbCommand.ExecuteNonQuery
Line 68:            Finally
Line 69:                dbConnection.Close

Stack Trace:
[OleDbException (0x80040e07): Data type mismatch in criteria expression.]
  System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(Int32 hr) +41
  System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) +174
  System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) +92
  System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) +65
  System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) +112
  System.Data.OleDb.OleDbCommand.ExecuteNonQuery() +66
  ASP.customer_create_aspx.insertCustomer(String name, Int32 employeeId, DateTime created, Int32 customerTypeId) in E:\hjemmesider\eu\customer\customer_create.aspx:67
  ASP.customer_create_aspx.btnCreate_Click(Object sender, EventArgs e) in E:\hjemmesider\eu\customer\customer_create.aspx:30
  System.Web.UI.WebControls.Button.OnClick(EventArgs e) +108
  System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +57
  System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +18
  System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
  System.Web.UI.Page.ProcessRequestMain() +1277



        Function insertCustomer(ByVal name As String, ByVal employeeId As Integer, ByVal created As Date, ByVal customerTypeId As Integer) As Integer
            Dim dbConnection As System.Data.IDbConnection = New System.Data.OleDb.OleDbConnection(ConfigurationSettings.AppSettings("connectionstring"))

            Dim queryString As String = "INSERT INTO [Customer] ([Name], [EmployeeId], [Created], [CustomerTypeId]) VALUES (@Name, @EmployeeId, @Created, @CustomerTypeId)"
            Dim dbCommand As System.Data.IDbCommand = New System.Data.OleDb.OleDbCommand
            dbCommand.CommandText = queryString
            dbCommand.Connection = dbConnection

            Dim dbParam_name As System.Data.IDataParameter = New System.Data.OleDb.OleDbParameter
            dbParam_name.ParameterName = "@Name"
            dbParam_name.Value = name
            dbParam_name.DbType = System.Data.DbType.String
            dbCommand.Parameters.Add(dbParam_name)
            Dim dbParam_employeeId As System.Data.IDataParameter = New System.Data.OleDb.OleDbParameter
            dbParam_employeeId.ParameterName = "@EmployeeId"
            dbParam_employeeId.Value = employeeId
            dbParam_employeeId.DbType = System.Data.DbType.Int32
            dbCommand.Parameters.Add(dbParam_employeeId)
            Dim dbParam_created As System.Data.IDataParameter = New System.Data.OleDb.OleDbParameter
            dbParam_created.ParameterName = "@Created"
            dbParam_created.Value = created
            dbParam_created.DbType = System.Data.DbType.DateTime
            dbCommand.Parameters.Add(dbParam_created)
            Dim dbParam_customerTypeId As System.Data.IDataParameter = New System.Data.OleDb.OleDbParameter
            dbParam_customerTypeId.ParameterName = "@CustomerTypeId"
            dbParam_customerTypeId.Value = customerTypeId
            dbParam_customerTypeId.DbType = System.Data.DbType.Int32
            dbCommand.Parameters.Add(dbParam_customerTypeId)

            Dim rowsAffected As Integer = 0
            dbConnection.Open
            Try
                rowsAffected = dbCommand.ExecuteNonQuery
            Finally
                dbConnection.Close
            End Try

            Return rowsAffected
        End Function
Avatar billede arne_v Ekspert
30. august 2004 - 11:08 #1
Er de 2 id'er faktisk integer felter i databasen ?
Avatar billede dcasso Nybegynder
30. august 2004 - 11:17 #2
Ja. Tabellen har 5 felter:

CustomerId - Autonummerering
Name - Tekst
EmployeeId - Tal
Created - Dato og klokkeslæt
CustomerTypeId - Tal
Avatar billede dcasso Nybegynder
17. oktober 2004 - 21:45 #3
Lukker spørgsmålet
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester