Tout le monde ici a toujours été d'une aide précieuse, directement ou indirectement. Et c'est avec grand espoir que cela, encore une fois, sonne vrai.Problème lors de l'injection d'un paramètre VB dans une procédure stockée (FireBird)
Pour l'amour de clarification, la procédure stockée est en cours d'exécution sous FireBird et le VB est de la variété .NET
J'ai une procédure stockée (extrait ci-dessous, peu important est WHERE)
select pn, pnm.description, si_number, entry_date, cmp_auto_key,
parts_flat_price, labor_flat_price, misc_flat_price, woo_auto_key,
wwt_auto_key
from parts_master pnm, wo_operation woo
where pn like :i_pn || '%'
and pnm.pnm_auto_key = woo.pnm_auto_key
into :pn, :description, :work_order, :entry_date, :cmp, :parts_price,
:labor_price, :misc_price, :woo, :wwt
J'essaie de passer un paramètre d'une application vb, qui utilise le paramètre I_PN, dont le code suit ci-dessous (Les variables pour MyServer et MyPassword sont déterminées à partir d'une partie antérieure du code.)
Try
Dim FBConn As New FirebirdSql.Data.FirebirdClient.FbConnection()
Dim FBCmd As FirebirdSql.Data.FirebirdClient.FbCommand
Dim MyConnectionString As String
MyConnectionString = _
"datasource=" & MyServer & ";database=" & TextBox4.Text & "; & _
user id=SYSDBA;password=" & MyPassword & ";initial catalog=;"
FBConn = New FirebirdSql.Data.FirebirdClient. & _
FbConnection(MyConnectionString)
FBConn.Open()
FBConn.CreateCommand.CommandType = CommandType.StoredProcedure
FBCmd = New FirebirdSql.Data.FirebirdClient. & _
FbCommand("WIP_COSTS", FBConn)
FBCmd.CommandText = "WIP_COSTS"
FBConn.CreateCommand.Parameters. & _
Add("@I_PN", FirebirdSql.Data.FirebirdClient.FbDbType.Text). & _
Value = TextBox1.Text
Dim I_PN As Object = New Object()
Me.WIP_COSTSTableAdapter.Fill(Me.WOCostDataSet.WIP_COSTS, @I_PN)
FBConn.Close()
Catch ex As System.Exception
System.Windows.Forms.MessageBox.Show(ex.Message)
End Try
Try
Dim FBConn As New FirebirdSql.Data.FirebirdClient.FbConnection()
Dim FBCmd As FirebirdSql.Data.FirebirdClient.FbCommand
Dim MyConnectionString As String
MyConnectionString = _
"datasource=" & MyServer & ";database=" & TextBox4.Text & "; & _
user id=SYSDBA;password=" & MyPassword & ";initial catalog=;"
FBConn = New FirebirdSql.Data.FirebirdClient. & _
FbConnection(MyConnectionString)
FBConn.Open()
FBConn.CreateCommand.CommandType = CommandType.StoredProcedure
FBCmd = New FirebirdSql.Data.FirebirdClient. & _
FbCommand("WIP_COSTS", FBConn)
FBCmd.CommandText = "WIP_COSTS"
FBConn.CreateCommand.Parameters. & _
Add("@I_PN", FirebirdSql.Data.FirebirdClient.FbDbType.Text). & _
Value = TextBox1.Text
Dim I_PN As Object = New Object()
Me.WIP_COSTSTableAdapter.Fill(Me.WOCostDataSet.WIP_COSTS, @I_PN)
FBConn.Close()
Catch ex As System.Exception
System.Windows.Forms.MessageBox.Show(ex.Message)
End Try
Quand je l'exercerai VB.App et essayez d'exécuter le programme, je reçois l'erreur suivante:
Dynamic SQL Error
SQL Error Code = -206
Column Unknown
I_PN
At Line 1, column 29
Et je ne peux pas à mettre le doigt sur ce que le problème réel est. Ce qui signifie, je ne sais pas si ma logique est incorrecte sur le côté VB, ou, sur la procédure stockée.
Tout codage inclus est regroupé à partir d'exemples que j'ai trouvés avec divers bits de code trouvés au cours de longs séjours de GoogleFu. Comme n'importe qui avec plus d'un mois ou deux d'expérience (contrairement à moi) avec VB peut attester d'un simple coup d'œil - mon code est probablement assez moche et pas bien formé - certainement pas élégant et assurément opérationnel. Je suis certainement en train de divertir toutes les saveurs de conseils à bras ouverts.
Comme d'habitude, si vous avez d'autres questions, je vais y répondre au mieux de mes capacités.
Merci encore.
Jasoomian
HardCode - toujours pas de joie. Vous recevez toujours la même erreur lors de l'exécution. – Jasoomian
Je ne connais pas la syntaxe des SP de Firebird, mais cette déclaration - où pn aime: i_pn || '%' - On dirait qu'il est dit "LIKE le paramètre OR%" - au lieu de - "LIKE le paramètre concaténé avec%". Devrait-il être "où pn comme: i_pn + '%'" – HardCode
Dans Firebird, le || est le caractère de concaténation, donc, le code fait déjà ce que vous avez suggéré (au moins de cette manière.) – Jasoomian