Problema con Bit

mercoledì 21 maggio 2008 - 15.34

Nerom Profilo | Newbie

Salve a tutti,
ho un programma che passa una serie di valori da inserire in un db SQL.
Il problema nasce quando parte l'inserimento. Infatti mi genera sempre l'errore "Impossibile convertire il valore STRING in BYTE[]". Ora penso che questo dipenda a l'inserimento di valori in campi di valore BIT.
Io per inserire un valore BIT prendo il mio valore e faccio
dim valoredainserire as object
valoredainserire = CByte (valoreinstringa)

La conversione non mi da errore, infatti ottengo o valore 0 (Byte) o 1 (Byte), qualcuno può aiutarmi perché questa cosa mi sta facendo impazzire.
Dimenticavo, uso vb.net.
Saluti a tutti e grazie in anticipo,
Nerom.

Brainkiller Profilo | Guru

>Il problema nasce quando parte l'inserimento. Infatti mi genera
>sempre l'errore "Impossibile convertire il valore STRING in BYTE[]".
>Ora penso che questo dipenda a l'inserimento di valori in campi
>di valore BIT.

Ma qui non si capisce perchè l'errore dice impossibile convertire la stringa in un array di byte ?? Che c'entra ?

>Io per inserire un valore BIT prendo il mio valore e faccio
>dim valoredainserire as object
>valoredainserire = CByte (valoreinstringa)

Il CByte comunque è corretto perchè ritorna un numero da 0 a 255 e un bit a livello di Database è 0 o 1.

Il database è un SQL Server ?

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

Nerom Profilo | Newbie

si il database è SQL.
Ma infatti io non riesco nemmeno a capire qual'è il dato che da errore perchè
Errore nella scrittura dei dati.Impossibile convertire il valore del parametro da un String a un Byte[].-21/05/2008 16.42.49
Io ai campi BIT gli passo o 0 o 1 in formato byte e che mi ricordi è così che funziona no?
Grazie per la risposta!
Saluti,
Nerom.

Brainkiller Profilo | Guru

>si il database è SQL.
>Ma infatti io non riesco nemmeno a capire qual'è il dato che
>da errore perchè
>Errore nella scrittura dei dati.Impossibile convertire il valore
>del parametro da un String a un Byte[]
>Io ai campi BIT gli passo o 0 o 1 in formato byte e che mi ricordi
>è così che funziona no?

Si dovrebbe, allora invece di passare CByte(parametro) prova a passarlo manualmente scrivi direttamente 0 o 1 e vedi se funziona. Così escludi o meno che la causa sia proprio quella riga lì.

Se usi dei Parametri (SqlParameter) assicurati che il tipo, sia corretto.

Secondo consiglio, io lancerei il SQL Profiler di SQL Server per vedere quali Query effettivamente arrivano sul RDBMS e se l'errore nasce dopo che la query è stata passata al RDBMS o prima cioè a livello di linguaggio e di .NET Data Provider.

Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

Nerom Profilo | Newbie

Guarda controllando il codice, la query da errore quando viene eseguito il comando
cmd.ExecuteNonQuery()
io prima ho messo un try proprio per vedere se nasce un eccezione e vedere quale è il tipo di errore.
Nel momento in cui viene eseguita la query (che non è altro che una insert di più campi), mi viene generato l'errore.
Sto provando anche a controllare campo per campo, ma è un pò dura

Guardando l'sql server profiler vedo gli stessi passi che vedo nel mio log ovvero

exec sp_AddAcqProcess_StepLog @LOG_STEP_DESCRIPTION=N'Avvio importazione incidente 3',@LOG_STEP_EventID=0,@ACQ_LOG_ID=64
go
exec sp_reset_connection
go
exec sp_AddAcqProcess_StepLog @LOG_STEP_DESCRIPTION=N'Errore nella scrittura dei dati.Impossibile convertire il valore del parametro da un String a un Byte[].-21/05/2008
17.02.49',@LOG_STEP_EventID=0,@ACQ_LOG_ID=64
go
exec sp_reset_connection
go
exec sp_AddAcqProcess_StepLog @LOG_STEP_DESCRIPTION=N'Annullo importazione incidente [incidente] 3',@LOG_STEP_EventID=0,@ACQ_LOG_ID=64
go
exec sp_reset_connection
go

quindi non sò che fare a questo punto..

guarda ho anche controllato le conversioni a livello di codice passo passo, le posto casomai ci fosse un errore che io non riesco a vedere
Function CreaParametro(ByVal strDestinazione As String, _ ByVal iTipoDestinazione As SqlDbType, _ ByVal strValore As String _ ) As SqlClient.SqlParameter Dim newParam = New SqlClient.SqlParameter() 'se è associato newParam.ParameterName = "@" & strDestinazione 'la chicciolina deve essere aggiunta perché nella tabella ci sono solo 'i nomi dei campi ed i parametri che si chiamano come i campi newParam.SqlDbType = iTipoDestinazione 'il tipo è salvato nella tabella al momento dell'associazione tra i campi 'tutti i valori contenuti nel file XML sono stringhe e saranno 'convertite al momento del salvataggio nel tipo imposto dal parametro Select Case newParam.SqlDbType Case SqlDbType.SmallInt, SqlDbType.Int, SqlDbType.TinyInt Try newParam.Value = CInt(strValore) Catch ex As Exception If strValore = "" Then newParam.value = CInt(0) End If End Try Case SqlDbType.Bit Try newParam.Value = CBool(BooleanoUniversale(strValore)) Catch ex As Exception MessageBox.Show("Errore nella conversione" & ex.ToString) End Try Case SqlDbType.Decimal Try newParam.value = CDec(CDbl(strValore)) Catch ex As Exception MessageBox.Show("Errore nella conversione" & ex.ToString) End Try Case SqlDbType.DateTime If strValore = "" Then Try newParam.Value = DBNull.Value Catch ex As Exception MessageBox.Show("Errore nella conversione" & ex.ToString) End Try Else Try newParam.Value = CDate(strValore) Catch ex As Exception MessageBox.Show("Errore nella conversione" & ex.ToString) End Try End If Case Else newParam.Value = CStr(strValore) End Select CreaParametro = newParam End Function End Class
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5