Erore parametro in visual studio 2008

sabato 09 gennaio 2010 - 15.16

Mau67 Profilo | Expert

Ciao al Forum, sono diversi giorni che non riesco a risolvere questo piccolo problema:

Ho un form dove carico dei dati nelle tabelle in SQLServer 2005 express qundo la lancio mi compare il seguente errore:
La procedura o funzione 'proc_CompetenzaUpsert' prevede il parametro '@ID', che non è stato specificato.

Ma il fatto è che il parametro @ID è specificato sia nelle Store Procedure
ALTER PROCEDURE dbo.proc_CompetenzaUpsert


@ID varchar(50)
, @Competenza varchar(50)
, @Tipologia varchar(50)
, @Tredicesima varchar(2)

AS
BEGIN

SET NOCOUNT ON;

IF NOT EXISTS(SELECT * FROM dbo.Competenze WHERE ID = @ID)
BEGIN

-- insert

INSERT INTO Competenze
(ID, Competenza, Tipologia, Tredicesima)
VALUES (@ID,@Competenza, @Tipologia, @Tredicesima)

END
ELSE
BEGIN

UPDATE Competenze
SET Competenza = @Competenza
, Tipologia = @Tipologia
, Tredicesima = @Tredicesima
WHERE (ID = @ID)

END
END

Sia nella Classe

Public Class MyCompetenza
Private _ID As String
Private _Competenza As String
Private _Tipologia As String
Private _Tredicesima As String


Public Property ID() As String
Get
Return _ID
End Get
Set(ByVal value As String)
_ID = value
End Set
End Property

Public Property Competenza() As String
Get
Return _Competenza
End Get
Set(ByVal value As String)
_Competenza = value
End Set
End Property

Public Property Tipologia() As String
Get
Return _Tipologia
End Get
Set(ByVal value As String)
_Tipologia = value
End Set
End Property

Public Property Tredicesima() As String
Get
Return _Tredicesima
End Get
Set(ByVal value As String)
_Tredicesima = value
End Set
End Property
End Class

E Anche nel Form

Private Sub ImportToDBCompetenza(ByVal ConnString As String)



If Not File.Exists(FILE_NAME) Then
MsgBox(FILE_NAME & " Stringa di connessione mancante.")
Return
End If
Dim sr As StreamReader = File.OpenText(FILE_NAME)
Dim sqlString As String
sqlString = sr.ReadLine()
Me.ToolStripStatusLabel2.Text = (sqlString) 'Questo è solo per verificare!
sr.Close()

Dim objConnection As New SqlConnection(sqlString)

' apro la connessione
objConnection.Open()

Using objCmd As New SqlCommand("dbo.proc_CompetenzaUpsert", objConnection)

' tipo stored procedure
objCmd.CommandType = CommandType.StoredProcedure

' ciclo il file
While Not fileInput.EndOfStream

Dim Row As MyCompetenza = Me.GetRowCompetenza(fileInput.ReadLine())

' genero il comando

' assegno i parametri alla stored procedure
objCmd.Parameters.Add("@ID", SqlDbType.VarChar, 50).Value = Row.ID
objCmd.Parameters.Add("@Competenza", SqlDbType.VarChar, 50).Value = Row.Competenza
objCmd.Parameters.Add("@Tipologia", SqlDbType.VarChar, 50).Value = Row.Tipologia
objCmd.Parameters.Add("@Tredicesima", SqlDbType.VarChar, 2).Value = Row.Tredicesima


' eseguo il comando
objCmd.ExecuteNonQuery() <<<< QUI da l'errore (La procedura o funzione 'proc_CompetenzaUpsert' prevede il parametro '@ID', che non è stato specificato.)


' pulisco la collezione dei parametri
objCmd.Parameters.Clear()

End While

End Using

objConnection.Close()


End Sub

''' <summary>
''' scompone la riga in campi di una classe
''' </summary>
Private Function GetRowCompetenza(ByVal Row As String) As MyCompetenza

' splitto la riga per il carattere ;
Dim columns As String() = Row.Split(";"c)

' nuova istanza della riga dell "tabella"
Dim objRow As New MyCompetenza

ProgressBar1.Visible = True
ProgressBar1.Maximum = CInt(ToolStripStatusLabel1.Text)
ProgressBar1.Minimum = 0
ProgressBar1.Value += 1



Application.DoEvents()


Dim pID As String = String.Empty
Dim pCompetenza As String = String.Empty
Dim pTipologia As String = String.Empty
Dim pTredicesima As String = String.Empty

If Not String.IsNullOrEmpty(columns(0)) Then
pID = columns(0)
End If
If Not String.IsNullOrEmpty(columns(1)) Then
pCompetenza = columns(1)
End If

If Not String.IsNullOrEmpty(columns(2)) Then
pTipologia = columns(2)
End If
If Not String.IsNullOrEmpty(columns(3)) Then
pTredicesima = columns(3)
End If

Return objRow

End Function

Qualcuno vede qualche errore mi potete aiutare grazie
Mau67

freeteo Profilo | Guru

Ciao,
hai verificato in debug se effettivamente prima di fare la query il parametro al command c'è, e soprattutto è valorizzato?
Io di solito uso il metodo "AddWithValue" e non ho avuto problemi...

Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

Mau67 Profilo | Expert

Grazie della risposta comunque ho già risolto grazie

Ciao
Mau67

freeteo Profilo | Guru

>Grazie della risposta comunque ho già risolto grazie
ok, se puoi posta la tua soluzione, in modo che possa essere utile a chi magari passa per questo thread...

Grazie, Ciao.

Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo

Salome Profilo | Newbie

Ciao Mau67

Ho letto il tuo post perchè ho il tuo stesso problema!
Potresti dirmi come lo hai risolto?

Grazie mille!!!

Ciao Alessia

Mau67 Profilo | Expert

risolto così

Private Function GetRowCompetenza(ByVal Row As String) As MyCompetenza

' splitto la riga per il carattere ;
Dim columns As String() = Row.Split(";"c)

' nuova istanza della riga dell "tabella"
Dim objRow As New MyCompetenza

ProgressBar1.Visible = True
ProgressBar1.Maximum = CInt(ToolStripStatusLabel1.Text)
ProgressBar1.Minimum = 0
ProgressBar1.Value += 1



Application.DoEvents()


Dim pID As String = String.Empty
Dim pCompetenza As String = String.Empty
Dim pTipologia As String = String.Empty
Dim pTredicesima As String = String.Empty

If Not String.IsNullOrEmpty(columns(0)) Then
pID = columns(0)
End If
If Not String.IsNullOrEmpty(columns(1)) Then
pCompetenza = columns(1)
End If

If Not String.IsNullOrEmpty(columns(2)) Then
pTipologia = columns(2)
End If
If Not String.IsNullOrEmpty(columns(3)) Then
pTredicesima = columns(3)
End If

objRow.ID = pID <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<avevo dimenticato questa parte
objRow.Competenza = pCompetenza
objRow.Tipologia = pTipologia
objRow.Tredicesima = pTredicesima

Return objRow

End Function


ciao
Mau67
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5