7
votes

Après avoir inséré, un seul caractère est inséré de "chaîne" dans la base de données

ci-dessous est ma capture d'écran de table: conception de la table principale

Données après l'insertion données après l'insertion p>

code en C # p> xxx pré >

Code pour créer la procédure dans SQL Server 2008 P>

ALTER procedure [dbo].[finalinsert] @fid int,@fcid int,@ftid int,@frdn date,@ford date,@uid int,
@paid int,@source varchar,@destination varchar,@fc varchar,@fty varchar,@fcl varchar,@ft time(7) ,@fn varchar
AS
INSERT INTO [shangrila].[dbo].[flight_reg_table]
           ([flight_id]
           ,[flight_cost_id]
           ,[flight_time_id]
           ,[flight_reg_date_now]
           ,[flight_on_reg_date]
           ,[user_id]
           ,[paid]
           ,[source]
           ,[destination]
           ,[flight_name]
           ,[flight_cost]
           ,[flight_type]
           ,[flight_class]
           ,[flight_time])
     VALUES
           (@fid,
           @fcid,
           @ftid,
           @frdn,
           @ford,
           @uid,
           @paid,
           @source,
           @destination,
           @fn,
           @fc,
           @fty,
           @fcl,
           @ft)


0 commentaires

4 Réponses :


27
votes

Dans votre SPROC, votre Varchar doit avoir une longueur associée à celle-ci, telle que varchar (50) code>. La longueur par défaut est 1. SO SQL n'envoie qu'un seul caractère à votre SPROC.

ALTER procedure [dbo].[finalinsert]
     @fid int
    ,@fcid int
    ,@ftid int
    ,@frdn date 
    ,@ford date
    ,@uid int
    ,@paid int
    ,@source varchar(50)
    ,@destination varchar(50)
    ,@fc varchar(50)
    ,@fty varchar(50)
    ,@fcl varchar(50)
    ,@ft time(7)
    ,@fn varchar(50)
AS


2 commentaires

-Merci beaucoup :) Je pense que le problème sera résolu, mais une fois la modification de la nouvelle erreur, on ne peut pas convertir la chaîne en format DateTime :(


Vous pouvez probablement simplement utiliser datetime.now au lieu de la transformer en une chaîne. Mais c'est ma supposition depuis que je ne sais pas quelle datetétime causent un problème.



3
votes

la cause première est mentionnée par @TallJoe, ainsi que par @jethro. strong>

Quoi qu'il en soit, votre code C # sera plutôt meilleur si on ressemblera à ceci: p>

using (SqlConnection connection = new SqlConnection(connectionString))
using (SqlCommand cmd = connection.CreateCommand())
{
    cmd.CommandText = commandName;
    cmd.CommandType = CommandType.StoredProcedure;

    ...
    cmd.Parameters.Add("@source", SqlDbType.VarChar, 50).Value = flightsession.Sscource;
    cmd.Parameters.Add("@destination", SqlDbType.VarChar, 50).Value = flightsession.Sdestination;
    cmd.Parameters.Add("@fn", SqlDbType.VarChar, 40).Value = flightsession.Sflightname;
    cmd.Parameters.Add("@fc", SqlDbType.VarChar, 50).Value = flightsession.Total;
    cmd.Parameters.Add("@fty", SqlDbType.VarChar, 50).Value = flightsession.Stype;
    cmd.Parameters.Add("@fcl", SqlDbType.VarChar, 50).Value = flightsession.Sflightclass;

    connection.Open(); // open just now!
    cmd.ExecuteNonQuery();
} // using block call Dispose() for each object locker to guarantee close of the connection


5 commentaires

@ABATISHCHEV: -NEW Erreurs Il ne peut désormais pas convertir la chaîne à la date. Le format de ma base de données de temps (7) est de 09h00: 00.0000000 et ma chaîne est 09:00:00


@Pixelerator: Dans quelle colonne?


@ABATISHCHEV: -Je figuré le convertit d'abord en datetime à l'aide de DateTime.Parse Méthode DateTime DT = DateTime.Parse (Volsession.sfrimer); et puis encore le convertir en string dt.tostring ("HH: mm: ss"); et merci de suggérer l'utilisation et disposer de la méthode :)


@Pixelerator: avez-vous essayé sqldbtype.dateTime sans Tostring () ?


@Abatishchev: - Je n'ai pas essayé, je vais essayer :)



0
votes

Votre procédure stockée Varcharne doit changer pour montrer la longueur du champ. Ie @fn varchar (50).


0 commentaires

0
votes

ainsi que le type de données des variables, vous devez mentionner la taille de l'élément de données. Ex: varchar (50)


0 commentaires