だから..私は私の問題をほぼすべて終えることができました。私はこの接続文字列を使用しました:
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;Database=Database1.mdf");
そして、次のエラーをスローします。
ユーザーのログインに失敗しました '
。mdf拡張子を削除すると、同じエラーがスローされます
ここで、文字列に次を追加します。
Integrated Security = true
それはこれを投げます:
ログインで要求されたデータベース「Database1.mdf」を開くことができません。ログインに失敗しました。ユーザー 'rBcollo-PC\rBcollo'のログインに失敗しました。
P.S for Integrated Security = false「ユーザーのログインに失敗しました」をスローします
問題は、データベースにユーザー名やパスワードを使用していないことです。
助けてください。
注:EntityFramework Core
とSQL Server
を使用している場合、私の答えが当てはまります。
このエラーは、「Database does not exist
」とアプリケーションがDB操作を実行しようとする理由が原因である可能性があります。
データベース操作を実行する前に、次の行を使用する必要があります。
_context.Database.EnsureCreated();
そして、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.
ASP.Net Coreでは、データベースがまだ作成されていない場合、同様のエラーが発生する可能性があります。 (エラーメッセージはログインとは関係がないため、混乱する可能性があります!)。
それを解決するいくつかの方法があります:
通常.csprojファイルが表示されるプロジェクトのルートパスのコマンドラインで、_dotnet ef database update
_の後に_dotnet ef migrations add Initial
_を実行できます。
または、dbContext.Database.EnsureCreated()
またはdbContext.Database.Migrate()
を呼び出すこともできますが、後の移行に損傷を与えないため、後者のMigrate()
メソッドをお勧めします。
_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();
}
_
これは答えられなかったので、私は私の提案をリストしたいと思いました。VSCommunity2015にも存在しているようで、管理者としてVSを実行すると、問題が解決したようです。
データベースが私のアカウントで実行されているVisualStudioで作成され、Webサービスが私のアカウントで実行されている場合でも、管理者なしではデータベースにアクセスできないようです。
おそらく他の誰かがこれが必要な理由に答えることができます。多くのVS機能が正しく機能するには管理者が必要であることを知っているだけで、そもそもなぜそれが有効になっていないのかわかりません。
ローカルの開発データベースを使用するだけで非常に煩わしい..このような面倒な情報や誤った情報がなくても機能するはずです。
統合セキュリティ= trueを使用するとすぐに、Windows資格情報を使用してSQLインスタンスにログインします。このユーザーにSQLインスタンスへのアクセス許可を与える必要があります。統合セキュリティ= trueを指定しない場合、匿名ユーザーとしてログインするため、ユーザー「。」のログインに失敗します。 SQLアカウントを作成し、それらを接続文字列で渡してログインするという3番目のオプションを使用できます。あなたが何をしたいかによります。
Netcoreを使用している場合は、プロジェクトディレクトリでdotnet ef database update
を実行することを忘れないでください。同じエラーが発生しましたが、修正されました。
Integrated Security = trueを設定すると、システムは現在のWindows資格情報を使用してデータベースへのログインを試みます。データベース内の現在のユーザーに特に許可を与えていない場合、これは機能しません。
Integrated Security = falseを設定した場合、またはIntegrated Securityオプションがまったくない場合は、ユーザー名とパスワードを指定する必要があります。
Data Source=.\SQLEXPRESS;Database=Database1.mdf;User Id=myUsername;
Password=myPassword;
ユーザー名またはパスワードを使用していないというあなたの声明は意味がありません。データベースにはユーザー名とパスワードが必要です。