Bonsoir,

J'ai un soft qui utilise le DataAdapter et des DataTable pour tout ce qui est communication à une base SqlServer 2005.
Et j'ai un truc que je comprends pas, quand je fais un INSERT (pas encore testé le UPDATE) d'un float (exemple: 1618.43), j'ai une imprécision de 0.00005 (1618.43005371094) , je la trouve assez importante et vous?.

Je modifie mon soft pour faire un essai avec SqlCommand et SqlParameter je fais un INSERT de la même valeur et là la valeur est bonne.

Vous avez une idée?

Je précise que la DataColumn de la table est bien de type float. J'ai aussi utilisé SqlProfiler pour vérifier, et j'insère bien la bonne valeur sans l'imprécision.


Code avec la Table
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
 
 
using( SqlConnection connection = new SqlConnection( stringConnection.ConnectionString ) )
{
                SqlDataAdapter adapter = new SqlDataAdapter( query, connection );
                SqlCommandBuilder cmd = new SqlCommandBuilder( adapter );
                DataTable table = new DataTable();                
                adapter.Fill(  table );
 
                DataRow row = table.NewRow();
                row["time"] = DateTime.Now;
                row["value"] = 1618.43;
                table.Rows.Add(row);
 
                adapter.Update( table );
}
Code avec SqlConnection
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
using( System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection( stringbuilder.ToString() ) )
            {
                System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand( "insert into Table (time, value) VALUES (@p1, @p2)", connection );
                cmd.Parameters.Add( "@p1", System.Data.SqlDbType.DateTime ).Value = DateTime.Now;
                cmd.Parameters.Add( "@p2", System.Data.SqlDbType.Float ).Value = 1618.43;
 
                connection.Open();
                cmd.ExecuteNonQuery();
                connection.Close();
            }
Merci d'avance pour votre aide