Ich benutze Dapper.NET und wenn ich den nächsten Code ausführe:
using (SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
con.Execute(@" insert Clients(name) values(@Name)", new {Name = "John"});
con.Close();
}
Die Abfrage, die ausgeführt wird, ist die nächste:
(@Name nvarchar(4000)) insert Clients(name) values(@Name)
Und meine Frage ist: Warum übersetzt Dapper einen String in einen nvarchar (4000)? Ich meine ... auf der Datenbank, das Namensfeld ist ein nvarchar (50) ...
Hat jemand diesen Fehler? Wie reparierst du es? Hast du einen anderen Fehler wie diesen gefunden?
Dies ist kein Fehler. Dapper muss einen SQL-Datentyp für einen Zeichenfolgenparameter auswählen, ohne auf die Datenbankstruktur zu achten (ganz zu schweigen von der Analyse Ihrer Abfrage und der Feststellung, dass Sie den Parameter in eine bestimmte Spalte einfügen).
Stell dir vor, wenn du das tust:
insert Clients(name) values(@Name + 'abc')
Soll Dapper herausfinden, dass @Name maximal 47 Zeichen lang sein kann?
Sie können genauer über die Größe Ihres Parameters entscheiden, wenn Sie möchten:
con.Execute(@" insert Clients(name) values(@Name)",
new { Name = new DbString { Value = "John", Length = 50 }});