Bonjour,

j'ai lu pas mal de chose sur ce site mais, je ne saisi toujours pas certaines choses.

J'ai une appli dans laquelle je fait un SELECT qui me retourne une seule ROW et dans la foulée je fais une INSERT de cette même ligne avec juste un champ que j'incremente. J'utilise un datareader.

Dans un premier temps j'ai ecrit mon INSERT avec des datareader.GetInt16 ou GetInt32 ou GetString en fonction du type du champs dans la base de données. Puis je suis tombé sur GetSqlValue, qui ne prend pas compte du type, donc très bien j'ai pu faire une boucle.

Seulement, dans les éléments retournés par mon SELECT j'ai des champs Null. Alors j'ai d'abord essayé ceci (dr est mon DataReader):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
strRequeteInsert = "INSERT INTO Samples (" + intAuditNumberNouveau;
 
                        for (int k = 1; k < dr.FieldCount; k++)
                        {
                            //MessageBox.Show(dr.GetSqlValue(k).ToString());
                            if (dr.GetSqlValue(k) == DBNull.Value)
                            {
                                strRequeteInsert += ",Null";
                            }
                            else
                            {
                                strRequeteInsert += ",'" + dr.GetSqlValue(k).ToString().Replace("'", "''") + "'";
                            }
                        }
 
                        strRequeteInsert += ")";
Mais je n'entre jamais dans le
Code : Sélectionner tout - Visualiser dans une fenêtre à part
if (dr.GetSqlValue(k) == DBNull.Value)
Alors j'ai fait:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
strRequeteInsert = "INSERT INTO Samples (" + intAuditNumberNouveau;
 
                        for (int k = 1; k < dr.FieldCount; k++)
                        {
                            //MessageBox.Show(dr.GetSqlValue(k).ToString());
                            if (dr.GetSqlValue(k).ToString() == "Null")
                            {
                                strRequeteInsert += ",Null";
                            }
                            else
                            {
                                strRequeteInsert += ",'" + dr.GetSqlValue(k).ToString().Replace("'", "''") + "'";
                            }
                        }
 
                        strRequeteInsert += ")";
Déjà je ne suis pas satisfait par ce code, mais en plus ça ne peut fonctionner car je mets entre quote tous les champs hors quand un champs est de type Int on ne met pas de quote.

Comment puis je faire?