2010-03-03 11 views
0

Je suis nouveau dans le monde Oracle, et je suis en train de faire un insert de .NET (C#) en utilisant une requête paramétrée.Oracle caractère non valide et long RAWs

Ma table est:

CREATE TABLE layer_mapping 
(
    lm_id NUMBER NOT NULL, 
    lm_layer_name VARCHAR2(50) NOT NULL, 
    lm_layer_file LONG RAW NOT NULL, 
    CONSTRAINT lm_pk PRIMARY KEY(lm_id) 
) 

"INSERT INTO VALEURS layer_mapping (: lm_id,: lm_layer_name,: lm_layer_file);"

Dans Visual Studio la requête ci-dessus est généré sur l'exécution, et je BindByName = true;

La valeur « lm_layer_file », où i est l'erreur suspecte, est alimenté à une classe à partir d'un fichier, et il est un tableau d'octets. Voici un exemple de la classe. La chose étrange est que, avec PostgreSQL, tout se passe normalement sans erreur.

que j'utilise les mauvaises méthodes pour générer mes longues valeurs brutes?

Oh, l'erreur que je reçois est ORA-0991 (char invalide).

Des pensées?

Répondre

4

figured it out:

Mon constructeur de commandes SQL ajoute un ';' à la fin de la commande, mais il semble que la classe OracleCommand le fasse aussi.

Résolu.

0

Je dirais que la première chose que vous devez faire est d'utiliser un CLOB dans la table, en supposant que vous êtes sur 9i ou plus, plutôt qu'une longue RAW. Les LONG/LONG RAW sont obsolètes depuis longtemps - la seule raison pour laquelle Oracle les maintient toujours dans le dictionnaire de données et Oracle a promis de ne jamais les changer.

+0

Merci pour le conseil. :RÉ –