J'essaie d'apprendre C # ASP.NET MVC 5. Et j'essaie d'utiliser Entity Framework pour tout ce que je fais.
Cependant, je dois exécuter une requête SQL brute et renvoyer les résultats dans un tableau.
Voici ce que j'ai fait jusqu'à présent.
J'ai créé ma classe de contexte qui me permet de me connecter à un serveur et me permet également de modifier la base de données au moment de l'exécution.
Voici ma classe de contexte
using ScripterEngine.Models;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Data.Entity;
using System.Data.Entity.Core.EntityClient;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
namespace ScripterEngine.DataAccessLayer
{
public class BaseContext : DbContext
{
protected string connectionName;
public DbSet<Campaign> Campaign { get; set; }
/**
* Created the connection to the server using the giving connection string name
*
* @param connName
*/
public BaseContext(string connName = "BaseConnection")
: base(connName)
{
connectionName = connName;
}
/**
* Changes the default database
*
* @param databaseName
*/
public BaseContext setDatabase(string databaseName)
{
var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings[connectionName].ConnectionString;
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString);
//change the database before creating the new connection
builder.InitialCatalog = databaseName;
string sqlConnectionString = builder.ConnectionString;
return new BaseContext(sqlConnectionString);
}
}
}
Et comment faire la connexion voici ce que je fais
BaseContext db1 = new BaseContext("server1");
var db1New = db1.setDatabase("someTableName");
string tableName = "SomeTableName";
var results = db1New.Database.SqlQuery("SELECT LOWER(column_name) AS column_name FROM information_schema.columns WHERE table_name = @tableName", tableName).ToArray();
Cela jette une erreur
Les arguments de type de la méthode 'System.Data.Entity.Database.SqlQuery (chaîne, params object [])' ne peuvent pas être déduits de l'utilisation. Essayez de spécifier explicitement les arguments de type. C: Projets .NET\ScripterEngine\ScripterEngine\Controllers\CampaignController.cs 42 27 ScripterEngine
Comment puis-je exécuter cette requête brute?
Spécifiez string
comme argument de type.
var results = db1New.Database.SqlQuery<string>("SELECT LOWER(column_name) AS column_name FROM information_schema.columns WHERE table_name = @p0", tableName).ToArray();
^^^^^^