Funzione splitta e inserisci, ma.....

giovedì 22 giugno 2006 - 11.58

kiwi Profilo | Newbie

4 occhi sono meglio di 2 mi domandavo se voi riuscite a vedere l'errore?

Questa funzione dovrebbe ricevere tre stringhe di testo così formattate:
Mario-Rossi-CodiceFiscale
Lo split mi divide il nome, cognome e il codice fiscale per poter inserire le voci nei campi
e il primo lo fa SinArray va tutto ok
però denArray e AzArray mi dicono "Indice oltre i limiti della matrice" penso che sia una questione di array, ma è uguale a SinArray che riesce a svolgere....?!?!
Comunque escludendo denArray e Azarray per far proseguire almeno Sinarray la funzione.....perdonate il giro di parole FUNZIONA! ma se poi vado a vedere nel DB non c'è traccia dei campi inseriti, why? perchè?
Riuscite a vedere qualcosa che io non vedo?
grazie

Public Function SplittaStringhe(ByVal codeI As String, ByVal Sin As String, ByVal Den As String, ByVal Az As String, ByVal SegnoSplit As String)
Dim SinArray(5) As Object
Dim DenArray(3) As Object
Dim AzArray(7) As Object
Dim MyconnX As OleDbConnection
Dim strInsertSin As String
Dim strInsertDen As String
Dim strInsertAz As String
Dim cmdInsertSin As OleDbCommand
Dim cmdInsertDen As OleDbCommand
Dim cmdInsertAz As OleDbCommand
'---------------------------------------------------------------------

SinArray = Split(Sin, SegnoSplit)
DenArray = Split(Den, SegnoSplit)
AzArray = Split(Az, SegnoSplit)
'---------------------------------------------------------------------
MyconnX = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Port.mdb")

strInsertSin = "insert T_Sin (S_Indirizzo, S_Cap, S_Comune, S_SiglaProvincia, S_CodComune) values ('" & SinArray(1) & "','" & SinArray(2) & "','" & SinArray(3) & "','" & SinArray(4) & "','" & SinArray(4) & "')"

strInsertDen = "insert into T_Den (D_Nome, D_Cognome, D_CodiceFiscale) values ('" & DenArray(1) & "','" & DenArray(2) & "','" & DenArray(3) & "')"

strInsertAz = "insert into T_Az (A_RS, A_CoFiscale, A_ParIva, A_Indirizzo, A_Cap, A_Comune, A_SiglaProvincia) values ('" & AzArray(1) & "','" & AzdaArray(2) & "','" & AzArray(3) & "','" & AzArray(4) & "','" & AzArray(5) & "','" & AzArray(6) & "','" & AzArray(7) & "')"

cmdInsertSin = New OleDbCommand(strInsertSin, MyconnX)
cmdInsertDen = New OleDbCommand(strInsertDen, MyconnX)
cmdInsertAz = New OleDbCommand(strInsertAz, MyconnX)
MyconnX.Open()
MyconnX.Close()

alx_81 Profilo | Guru

Ciao,
scusami, ma devo ammettere che non ho capito molto nel tuo post..
dunque.. una stringa formattata come

NOME-COGNOME-CODICEFISCALE..

Tu vuoi fare una funzione che splitta la stringa, crea dei command e inserisce in un db sql server.. giusto?
ora, non capisco perchè 3 matrici...

spiegami meglio per favore..
Alx81 =)

http://blogs.dotnethell.it/suxstellino

kiwi Profilo | Newbie

Ciao, grazie per aver risposto
devono arrivare 3 stringhe alla mia funzione più un codice e il segno di split volendo....

comunque le stringhe coinvolte sono queste
'SegnoSplit = "-"
Sin = "Indirizzo-CAP-Comune-Provincia-CodComune"
Den = "Nome-Cognome-CodiceFiscale"
Az = "RagioneSociale-CodiceFiscale-PartitaIva-Indirizzo-Cap-Comune-Provincia"

i valori messi qui ovviamente sono di esempio poi nella realtà mi arrivano i valori da inserire nei campi

da questi nascono o meglio si valorizzano gli array:
SinArray
DenArray
AzArray

con compongono le insert into, che sembrano non funzionare!

alx_81 Profilo | Guru

dunque.. il carattere "-" è pericoloso.. metti che esista già in un valore che ti passano.. sei fregato..
se riesci usa qualcosa di più raro, tipo la tilde ~ oppure il pipe | .. vedi te se riesci..
inoltre, se non setti una particolare opzione, le matrici create sono 0-based, e quindi partono da 0, non da 1..
detto questo, ti conviene fare così:


Private Function SplitAndInsert(ByVal SinString as String, ByVal DenString as String, ByVal AzString as String, ByVal SplitterString As String)

' matrici dinamiche, senza lunghezze prestabilite
Dim SinArray As String()
Dim DenArray As String()
Dim AzArray As String()
' connessione
Dim objConn as New OledbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Port.mdb")
' stringhe SQL
Dim strInsertSin As String
Dim strInsertDen As String
Dim strInsertAz As String
' command da eseguire
Dim cmdInsertSin As New OleDbCommand()
Dim cmdInsertDen As New OleDbCommand()
Dim cmdInsertAz As New OleDbCommand()

' split dei dati
SinArray = Split(SinString, Splitter)
DenArray = Split(DenString, Splitter)
AzArray = Split(AzString, Splitter)

' creazione commandtext (la split torna array 0-based.. quindi parti da 0 non da 1, come indice
strInsertSin = "INSERT INTO T_Sin (S_Indirizzo, S_Cap, S_Comune, S_SiglaProvincia, S_CodComune) VALUES ('" & SinArray(0) & "','" & SinArray(1) & "','" & SinArray(2) & "','" & SinArray(3) & "','" & SinArray(4) & "')"

strInsertDen = "INSERT INTO T_Den (D_Nome, D_Cognome, D_CodiceFiscale) VALUES ('" & DenArray(0) & "','" & DenArray(1) & "','" & DenArray(2) & "')"

strInsertAz = "INSERT INTO T_Az (A_RS, A_CoFiscale, A_ParIva, A_Indirizzo, A_Cap, A_Comune, A_SiglaProvincia) VALUES ('" & AzArray(0) & "','" & AzdaArray(1) & "','" & AzArray(2) & "','" & AzArray(3) & "','" & AzArray(4) & "','" & AzArray(5) & "','" & AzArray(6) & "')"

' completo i comandi
cmdInsertSin.CommandText = strInsertSin
cmdInsertSin.Connection = MyconnX
cmdInsertDen.CommandText = strInsertDen
cmdInsertDen.Connection = MyconnX
cmdInsertAz.CommandText = strInsertAz
cmdInsertAz.Connection = MyconnX

'MANCA L'EXECUTE DEI COMANDI!!!
cmdInsertSin.ExecuteNonQuery()
cmdInsertDen.ExecuteNonQuery()
cmdInsertAz.ExecuteNonQuery()

MyconnX.Close()
MyConnX.Dispose()

End Function



Alx81 =)

http://blogs.dotnethell.it/suxstellino

kiwi Profilo | Newbie

Caspio dell'EXECUTE!

ok, ok mi continua a sfuggire il perchè un array si e due no comunque....
Per lo split ho lasciato per quel motivo la possibilità di inviarlo perchè non so come e dove verrà usata esattamente la funzione.

ti ringrazio ancora e.....complimenti per l'ordine io parto bene poi ........

kiwi Profilo | Newbie

cmdInsertSin.CommandText = strInsertSin
cmdInsertSin.Connection = objConn
cmdInsertDen.CommandText = strInsertDen
cmdInsertDen.Connection = objConn
cmdInsertAz.CommandText = strInsertAz
cmdInsertAz.Connection = objConn


objConn.Open() '<----- ho aggiunto l'apertura della connessione per chi legge poi
'questo post e magari non lo sa...

'però mi sa che lo split s'incasina con il trattino - alto e quello _ basso perchè se lascio i campi tipo:
'A_indirizzo come provavo prima mi dice che gli risultano troppi valori.
'Ok cambio il simbolo di split!

cmdInsertSin.ExecuteNonQuery()
cmdInsertDen.ExecuteNonQuery()
cmdInsertAz.ExecuteNonQuery()

Grazie ancora ciao!!

alx_81 Profilo | Guru

se ritieni che la risposta ti sia servita, ti chiedo cortesemente di accettarla.. grazie cmq!
Alx81 =)

http://blogs.dotnethell.it/suxstellino

kiwi Profilo | Newbie

>se ritieni che la risposta ti sia servita, ti chiedo cortesemente
>di accettarla.. grazie cmq!
>Alx81 =)
>
>http://blogs.dotnethell.it/suxstellino


Scusa non ho capito se ti sei offeso e per cosa..... non mi sembra di aver scritto qualcosa che potesse risultare scortese, sei stato molto gentile e ho scritto dell'apertura della connessione non per correggere te, ma pensando a chi avrebbe letto poi senza sapere che mancava quel pezzo................tutto qui!

ti ringrazio ancora per l'aiuto

alx_81 Profilo | Guru

no no.. ci mancherebbe..
solo che mi faceva piacere, se lo ritieni opportuno, che tu cliccassi la voce "accetta la risposta".. =)
Alx81 =)

http://blogs.dotnethell.it/suxstellino

kiwi Profilo | Newbie

ooopsss non sapevo scusa
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5