我如何在运行时指定登录名\密码以通过C#中的EF6连接Oracle?

问题描述 投票:0回答:1

我正在创建登录窗口以从我的应用程序连接Oracle(现有数据库中的C#Entity Framework Code First)。我想让用户能够设置自己的用户名\密码来与数据库连接。我试图在DbContext中更改连接字符串,但这是行不通的。连接字符串似乎已更改,但是提供程序返回无效的login \ password异常。当我尝试使用已存储的传递字符串连接数据库时,一切正常。我认为这种行为有一些安全原因。如何在运行时正确更改连接字符串?我正在使用VS 2017,实体框架6,Oracle.ManagedDataAccess 18.3,Oracle 11.2 Server。

App.config

name="ConnStrPass" connectionString="DATA SOURCE=titan;PASSWORD=REALPASS;PERSIST SECURITY INFO=True;USER ID=BEE" providerName="Oracle.ManagedDataAccess.Client"

name="ConnStrNoPass" connectionString="DATA SOURCE=titan;PASSWORD=QWERTY;PERSIST SECURITY INFO=True;USER ID=BEE" providerName="Oracle.ManagedDataAccess.Client"

DBDemoModel.cs

public partial class DBDemoModel : DbContext
{
    public DBDemoModel()
        : base("name=ConnStrPass")
    {
    }

    //overriding constructor DBDemoModel to change pass in ConnectionString

    public DBDemoModel(string pass)
            : base("name=ConnStrNoPass")
    {

        this.Database.Connection.ConnectionString = this.Database.Connection.ConnectionString.Replace("QWERTY", pass);

    }

AbonentsFinder.cs //工作正常

    public List<ABONENTS> SelectAbonentsByName(string textToFind)
    {
        using (DBDemoModel db = new DBDemoModel())
        {
            var cont = db.ABONENTS.Where(a => a.OWNER.Contains(textToFind));
            var abon = cont.ToList();
            return new List<ABONENTS>(abon);
        }            
    }

AbonentsFinder.cs //无效的用户名\登录名

    public List<ABONENTS> SelectAbonentsByName(string textToFind, string pass)
    {
        using (DBDemoModel db = new DBDemoModel(pass))
        {
            var cont = db.ABONENTS.Where(a => a.OWNER.Contains(textToFind));
            var abon = cont.ToList();  //exception
            return new List<ABONENTS>(abon);
        }            
    }

DBDemoModel.cs //System.NotSupportedException

    public DBDemoModel(string pass)
            : base(new OracleConnection("DATA SOURCE=titan; PASSWORD="+pass+";USER ID=BEE"), true)
    {

    }
c# oracle entity-framework-6 connection-string
1个回答
0
投票

您需要登录才能更改密码(类似于大多数网站会先要求您输入当前密码的方式。

因此,让他们使用现有密码登录,之后您可以通过连接对象运行以下命令:

“通过他们的新密码标识的用户MY_USER”

© www.soinside.com 2019 - 2024. All rights reserved.