Dapper.NET: Le varchar (4000) par défaut

.net ado.net c# dapper sql-server

Question

J'utilise Dapper.NET et quand j'exécute le code suivant:

using (SqlConnection con = new SqlConnection(connectionString))
        {
            con.Open();
            con.Execute(@" insert Clients(name) values(@Name)", new {Name = "John"});
            con.Close();
        }

La requête qu'il exécute est la suivante:

(@Name nvarchar(4000)) insert Clients(name) values(@Name)

Et ma question est: pourquoi Dapper traduit-il une chaîne en nvarchar (4000)? Je veux dire ... sur la base de données, le champ de nom est un nvarchar (50) ...

Quelqu'un est-il confronté à ce bug? Comment le réparer? Avez-vous trouvé un autre bug comme celui-ci?

Réponse populaire

Ce n'est pas un bug. Dapper doit choisir un type de données SQL pour un paramètre de chaîne, sans examiner la structure de la base de données (sans parler de l'analyse de votre requête et de la détermination que vous insérez le paramètre dans une colonne particulière).

Imaginez si vous faisiez ceci:

insert Clients(name) values(@Name + 'abc')

Dapper doit-il comprendre que @Name peut contenir jusqu'à 47 caractères?

Vous pouvez être plus précis sur la taille de votre paramètre si vous aimez:

con.Execute(@" insert Clients(name) values(@Name)", 
    new { Name = new DbString { Value = "John", Length = 50 }});


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi