Donc..J'ai réussi à finir presque tous mes problèmes.Mais maintenant, je traite avec un autre. J'ai utilisé cette connectionstring:
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;Database=Database1.mdf");
Et cela jette l'erreur suivante:
Échec de la connexion pour l'utilisateur '
Si je supprime l'extension .mdf , la même erreur est renvoyée
Maintenant, si je vais ajouter ce qui suit à la chaîne:
Integrated Security = true
Il jette ceci:
Impossible d'ouvrir la base de données "Database1.mdf" demandée par le login. La connexion a échoué. La connexion a échoué pour l'utilisateur 'rBcollo-PC\rBcollo'.
P.S for Integrated Security = false, le message "Échec de la connexion pour l'utilisateur" a été généré.
Le problème est que je n'utilise aucun nom d'utilisateur ou mot de passe pour la base de données.
Toute aide, s'il vous plaît?
Remarque: ma réponse serait applicable si vous utilisez EntityFramework Core
avec SQL Server
Cette erreur peut être due à la raison 'Database does not exist
' et à l'application essayant d'effectuer des opérations de base de données.
Tout ce que vous devez utiliser la ligne suivante avant d'effectuer toute opération de base de données.
_context.Database.EnsureCreated();
Et qu'est-ce que EnsureCreated
?
// Summary:
// Ensures that the database for the context exists. If it exists, no action is
// taken. If it does not exist then the database and all its schema are created.
// If the database exists, then no effort is made to ensure it is compatible with
// the model for this context.
// Note that this API does not use migrations to create the database. In addition,
// the database that is created cannot be later updated using migrations. If you
// are targeting a relational database and using migrations, you can use the DbContext.Database.Migrate()
// method to ensure the database is created and all migrations are applied.
//
// Returns:
// True if the database is created, false if it already existed.
Je n'ai pas répondu à cette question. J'ai donc pensé lister ma suggestion, semble être présent dans VS Community 2015 également, exécuter VS en tant qu'administrateur et cela semble résoudre le problème.
Même si la base de données a été créée dans visual studio sous mon compte et que les services Web s'exécutent sous mon compte, il semble impossible d'accéder à la base de données sans administrateur.
Peut-être que quelqu'un d'autre pourra vous dire pourquoi cela est nécessaire. Sachez simplement que l'administrateur est nécessaire pour que de nombreuses fonctionnalités du système virtuel fonctionnent correctement, sans savoir pourquoi ce n'est pas activé.
Très ennuyeux juste pour utiliser une base de données dev locale .. devrait juste fonctionner sans toutes ces faussetés et fausses informations.
Si vous utilisez netcore, n'oubliez pas d'exécuter dotnet ef database update
dans le répertoire du projet. J'avais la même erreur et cela a été corrigé pour moi.
Si vous définissez Integrated Security = true, le système tente de se connecter à la base de données avec vos informations d'identification Windows actuelles. Si vous n'avez pas spécifiquement donné l'autorisation à l'utilisateur actuel dans votre base de données, cela ne fonctionnera pas.
Si vous définissez la sécurité intégrée = false ou ne pas l'option de sécurité intégrée du tout, alors vous devez fournir le nom d'utilisateur et mot de passe.
Data Source=.\SQLEXPRESS;Database=Database1.mdf;User Id=myUsername;
Password=myPassword;
Votre déclaration selon laquelle vous n'utilisez pas de nom d'utilisateur ou de mot de passe n'a aucun sens. Vous devez avoir un nom d'utilisateur et un mot de passe sur une base de données.
Dans ASP.Net Core, une erreur similaire peut être générée si la base de données n'est pas encore créée! (Le message d'erreur peut vous dérouter car il n'est pas lié à la connexion!).
Il y a plusieurs façons de le résoudre:
Vous pouvez exécuter dotnet ef database update
après dotnet ef migrations add Initial
dans la ligne de commande dans le chemin racine du projet où vous voyez habituellement le fichier .csproj.
Vous pouvez également appeler dbContext.Database.EnsureCreated()
ou dbContext.Database.Migrate()
, mais la dernière méthode Migrate()
est recommandée car elle n'endommage pas les migrations ultérieures.
public class Program
{
public static void Main(string[] args)
{
var Host = BuildWebHost(args);
using (var scope = Host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
var dbContext = services.GetRequiredService<MyDbContext>();
//dbContext.Database.EnsureCreated(); //ensure db is created (created database can't be later updated using migrations!)
dbContext.Database.Migrate(); //ensure pending migrations applied and db is created
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred creating the DB.");
}
}
Host.Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
dès que vous utilisez integrated security = true, il utilise vos informations d'identification Windows pour vous connecter à l'instance SQL. vous devez donner à cet utilisateur les autorisations sur l'instance SQL. Si vous ne spécifiez pas security intégré = true, il se connecte en tant qu'utilisateur anonyme et c'est pourquoi la connexion a échoué pour l'utilisateur '.'. vous pouvez utiliser la troisième option consistant à créer un compte SQL, puis à les transmettre dans la chaîne de connexion et à vous connecter. Cela dépend de ce que vous voulez faire.