ERREUR [22P02] ERREUR: invalid input syntaxe entier: “”;
Jamais vu cette erreur:
ERREUR [22P02] ERREUR: invalid input syntaxe entier: ""; Erreur lors de l'exécution de la requête
Création de la table:
Public Function PrimkCreate(ByVal myPrimkTable As String, ByVal nCon As OdbcConnection) As Integer
Dim ans As Integer
Dim cCommand As OdbcCommand = New OdbcCommand("CREATE TABLE IF NOT EXISTS " + myPrimkTable + "(" & _
"prm_id int NOT NULL, " & _
"pkni text, " & _
"pdatum text, " & _
"pdatumnaplate text, " & _
"pdanaodgode int, " & _
"puldok text, " & _
"puldokbroj text, " & _
"pdatumk text, " & _
"pvrijemek text, " & _
"pdobid int, " & _
"pdoboib text, " & _
"pnabc double precision, " & _
"purab double precision, " & _
"ppdv double precision, " & _
"ppnak double precision, " & _
"pprodc double precision, " & _
"pvrstaprimke int, " & _
"pzapisniktekst text, " & _
"prez text, " & _
"CONSTRAINT " & myPrimkTable & "_pkey PRIMARY KEY(prm_id))", nCon)
ans = cCommand.ExecuteNonQuery()
cCommand.Dispose()
Return ans
End Function
Code de mise à jour:
Public Function update_LPrimk(ByRef primk As Integer, ByVal mCon As OdbcConnection) As Integer
Dim retval As Integer
Dim uCmd As OdbcCommand = New OdbcCommand("UPDATE " & myPrimkTable & " SET " & _
"prm_id=" & primk & ", " & _
"pkni='" & prm.pKni & "', " & _
"pdatum='" & prm.pDatum & "', " & _
"pdatumnaplate='" & prm.pDatumNaplate & "', " & _
"pdanaodgode=" & prm.pDanaodgode & ", " & _
"puldok='" & prm.pUlDok & "', " & _
"puldokbroj='" & prm.pUlDokBroj & "', " & _
"pdatumk='" & prm.pDatumk & "', " & _
"pvrijemek='" & prm.pVrijemek & "', " & _
"pdobid='" & prm.pDobID & "', " & _
"pdoboib='" & prm.pDobOib & "', " & _
"pnabc='" & Replace(prm.pNabc.ToString, ",", ".") & "', " & _
"purab='" & Replace(prm.pURab.ToString, ",", ".") & "', " & _
"ppdv='" & Replace(prm.pPdv.ToString, ",", ".") & "', " & _
"ppnak='" & Replace(prm.pPnak.ToString, ",", ".") & "', " & _
"pprodc='" & Replace(prm.pProdc.ToString, ",", ".") & "', " & _
"pvrstaprimke=" & prm.pVrstaPrimke & ", " & _
"pzapisniktekst='" & prm.pZapisnikTekst & "', " & _
"prez='" & prm.pRez & "' " & _
"WHERE prm_id=" + primk.ToString, mCon)
retval = uCmd.ExecuteNonQuery()
uCmd.Dispose()
Return retval
End Function
Requête ressemble à ça:
UPDATE primke SET prm_id=1, pkni='U', pdatum='07.01.2013', pdatumnaplate='10.01.2013',
pdanaodgode=3, puldok='ghkzug gugug', puldokbroj='jkhk', pdatumk='', pvrijemek='',
pdobid='', pdoboib='', pnabc='0', purab='0', ppdv='0', ppnak='0', pprodc='0',
pvrstaprimke=0, pzapisniktekst='', prez='' WHERE prm_id=1
J'ai beaucoup de tables où j'ai exécuter des commandes similaires mais n'ont jamais vu une telle erreur.
Quel pourrait être le problème?
'0'
n'est pas un nombre valide, c'est le caractère littéral. 0
est un nombre. Vous devez également pas magasin de dates dans text
colonnes.Les Dates et les " 0 " sont ici en raison des enjeux liés à l'internationalisation et VB.NET les questions de. Ces '0' est pour la double précision, les numéros enregistrés de cette façon. OK, pas bon mais je l'utilise dans beaucoup de tables. Voici quelque chose de spécifique.
Le
'0'
est à la racine de votre problème. Il n'est pas un nombre. Vous devez utiliser 0
pour un certain nombre de valeur.''
n'est pas un nombre double précision. Si vous voulez dire NULL, utilisez la valeur NULL.En aparté, n'est-ce pas là quelque chose qui utilise des espaces et des valeurs soumises à VB.net? Il doit y avoir une meilleure approche que tout cela concaténation de chaîne. Et vous devriez être en affaire avec L10N et I18N questions sur les bords de la demande: standardiser sur l'entrée, de localiser sur la production.
OriginalL'auteur Wine Too | 2013-01-07
Vous devez vous connecter pour publier un commentaire.
Je vous conseille de lire le chapitre Constantes dans le manuel. C'est une brève et instructif de lire.
La cause du message d'erreur, c'est que
''
est un chaîne vide qui n'a pas de représentation dans un type numérique commeinteger
.@a_horse_with_no_name: Pour être précis,
'0'
est un chaîne constante de PostgreSQL qui peuvent être exprimées àinteger
aussi bien qu'il peut être coulé àtext
, seulementtext
est la valeur par défaut pour les constantes de chaîne. Considérer cette démo:SQL Violon.
'foobar'
un littéral de chaîne de caractères :), j'ai tendance à éviter le nom de "chaîne" en combinaison avec le SQL comme il n'est pas un type de données. Et je conseille fortement contre l'utilisation implicite de type de données de converstion. C'est tout simplement l'appel des ennuis. Toujours préférable d'utiliser le bon littéral (constante) de la syntaxe.Je suis d'ailleurs surpris que
i = '0'
œuvres. Je pensais que ces conversions implicites avait été enlevé avec 8.3Je pense que ce qui a été enlevé avec 8.3 est automatique contrainte d'un constante numérique pour un type de caractère. (
0
->'0'::text
). Mais un générique constante de chaîne ('0'
) peut être contraint à aucun type.Je pense que la "chaîne" est juste le terme qui convient pour un constante de chaîne comme
'0'
, parce que "chaîne" n'est pas un type de données - depuis le littéral n'a pas été moulé pour tout type de données encore.Vous pouvez utiliser la fonction
to_number()
pour convertir une chaîne en unnumeric
type, indépendant de paramètres régionaux.OriginalL'auteur Erwin Brandstetter