Comment exécuter des requêtes Dapper/MySql en C# à l'aide de variables définies par l'utilisateur
P粉546257913
2023-08-25 23:41:09
<p>J'ai essayé d'exécuter ce code : </p>
<pre class="brush:php;toolbar:false;">en utilisant le système ;
en utilisant Dapper ;
en utilisant MySql.Data.MySqlClient ;
espace de noms DapperTests
{
Programme de classe
{
static void Main(string[] arguments)
{
en utilisant (var db = new MySqlConnection (@"mysql_connstr_here"))
{
var sql = @"
set @foo := (sélectionnez count(*) dans la table1);
sélectionnez table2.*, @foo de table2;";
var résultat = db.Query(sql);
}
Console.ReadLine();
}
}
}</pré>
<p>Mais j'obtiens l'exception suivante :</p>
<pre class="brush:php;toolbar:false;">System.NullReferenceException : 'La référence de l'objet n'est pas définie sur une instance de l'objet. '
Cette exception est initialement levée dans cette pile d'appels :
MySql.Data.MySqlClient.MySqlConnection.Reader.set(MySql.Data.MySqlClient.MySqlDataReader)</pre>
<p>Mon hypothèse initiale était que la variable était traitée comme un SqlParameter, et comme je ne transmettais aucun paramètre, mon code a échoué.
Existe-t-il un moyen d'exécuter une requête comme celle-ci en utilisant Dapper ? </p>
Ou vous pouvez écrire vos instructions SQL en utilisant des déclarations de variables SQL valides :
var sql = @"declare @foo int = 0; select @foo;";
Remarque : ce code a été testé sur Sql Server et ne fonctionne pas sur MySql. Je ne l'utilise pas.
J'ai trouvé ceci dans la Documentation Dapper :
Il me suffit donc d'ajouter
Allow User Variables=True
dans la chaîne de connexion. Ça a marché.