我怎么能从另一个应用程序的数据库工作

本文关键字:数据库 工作 应用程序 另一个 怎么能 | 更新日期: 2023-09-27 17:51:21

我来问这个问题,因为我不仅不知道怎么做,而且我也不知道如何在网上搜索某种澄清。

我有一个web应用程序创建与MVC5,实体框架和代码第一,在那里我使用网格(jsgrid)。在这个应用程序中,用户登录后,他们可以看到创建的应用程序并添加新的应用程序,也可以为它们生成许可证(应用程序密钥)。

现在,我们的想法是处理来自dll模块的许可证生成器和数据库保存(仅用于许可证)。

所以,既然数据库是在MVC应用程序中创建的,我怎么能使dll模块检查到该数据库,以确保应用程序没有那个键已经,然后,保存到数据库中?

(所有这些代码都来自MVC应用程序)

DBContext:

public class LicenseDataContext : DbContext
    {
        public LicenseDataContext()
            : base("LicenseDataContext")
        {
        }
        public DbSet<Application> Applications { get; set; }
        public DbSet<License> Licenses { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
    }

LicenseModel

public class License
{
    public int ID { get; set; }
    public string AppName { get; set; }
    public string license { get; set; }
    public string ClientName { get; set; }
    public string ClientEmail { get; set; }
    public Status? Status { get; set; }
    public string CreatedBy { get; set; }
    public string CreationDate { get; set; }
    public string ModifiedBy { get; set; }
    public string ModificationDate { get; set; }
    public SendStatus? SendStatus { get; set; }
    public string SendDate { get; set; }
}
public class LicenseFilter
{
    public string AppName { get; set; }
    public string license { get; set; }
    public string ClientName { get; set; }
    public string ClientEmail { get; set; }
    public Status? Status { get; set; }
    public string CreatedBy { get; set; }
    public string CreationDate { get; set; }
    public string ModifiedBy { get; set; }
    public string ModificationDate { get; set; }
    public SendStatus? SendStatus { get; set; }
    public string SendDate { get; set; }
}

}

LicenseController

public class LicenseDataController : ApiController
{
    MailAddress addr;
    LicenseDataContext _db = new LicenseDataContext();
    LicenseDataContext DB
    {
        get { return _db; }
    }
    public IEnumerable<object> Get()
    {
        LicenseFilter filter = GetFilter();
        var result = DB.Licenses.Where(c => c.AppName == LicenseManagerController._appName &&
            (String.IsNullOrEmpty(filter.AppName) || c.AppName.Contains(filter.AppName)) &&
            (String.IsNullOrEmpty(filter.license) || c.license.Contains(filter.license)) &&
            (String.IsNullOrEmpty(filter.ClientName) || c.ClientName.Contains(filter.ClientName)) &&
            (String.IsNullOrEmpty(filter.ClientEmail) || c.ClientEmail.Contains(filter.ClientEmail)) &&
            (!filter.Status.HasValue || c.Status == filter.Status)
            && (String.IsNullOrEmpty(filter.CreatedBy) || c.CreatedBy.Contains(filter.CreatedBy)) &&
            (String.IsNullOrEmpty(filter.CreationDate) || c.CreationDate.Contains(filter.CreationDate)) &&
            (String.IsNullOrEmpty(filter.ModifiedBy) || c.ModifiedBy.Contains(filter.ModifiedBy)) &&
            (String.IsNullOrEmpty(filter.ModificationDate) || c.ModificationDate.Contains(filter.ModificationDate)) &&
            (!filter.SendStatus.HasValue || c.SendStatus == filter.SendStatus) &&
            (String.IsNullOrEmpty(filter.SendDate) || c.SendDate.Contains(filter.SendDate))
        );
        return result.ToArray();
    }
    private LicenseFilter GetFilter()
    {
        NameValueCollection filter = HttpUtility.ParseQueryString(Request.RequestUri.Query);
        return new LicenseFilter
        {
            AppName = filter["AppName"],
            license = filter["license"],
            ClientName = filter["ClientName"],
            ClientEmail = filter["ClientEmail"],
            Status = (filter["Status"] == "0") ? (Status?)null : (Status)int.Parse(filter["Status"]),
            CreatedBy = filter["CreatedBy"],
            CreationDate = filter["Date"],
            ModifiedBy = filter["ModifiedBy"],
            ModificationDate = filter["Date"],
            SendStatus = (filter["SendStatus"] == "0") ? (SendStatus?)null : (SendStatus)int.Parse(filter["SendStatus"]),
            SendDate = filter["Date"]
        };
    }
    public void Post([FromBody]License license)
    {
        try
        {
            //Here, I suppose to just call the dll to generate the license and save it, instead of doing this.
                addr = new MailAddress(User.Identity.Name);
                string username = addr.User;
                license.AppName = LicenseManagerController._appName;
                //license.license = license from module;
                license.CreatedBy = username;
                license.CreationDate = DateTime.Today.ToString("dd/MM/yy");
                if (license.SendStatus == SendStatus.Sent)
                {
                    license.SendDate = DateTime.Today.ToString("dd/MM/yy");
                }
                DB.Licenses.Add(license);
                DB.SaveChanges();
            }
            catch (Exception insert)
            {
                Debug.WriteLine(insert.ToString());
            }
        }

有什么主意能帮我一点忙吗?

谢谢!

我怎么能从另一个应用程序的数据库工作

根据评论,我现在了解了您想要实现的要点。

使用DLL,如果你想访问特定的数据库连接字符串,那么你可以访问应用程序配置(在你的例子中是web.config)。

1)。在DLL项目中添加对System.Configuration的引用2)。使用ConfigurationManager。ConnectionStrings属性读取应用程序(windows或web应用程序)的配置文件

现在,如果你想要一个动态连接字符串,那么你应该在你的DLL上公开一个接受连接字符串的公共方法。输入可以来自用户,也可以来自任何你能想到的来源。

另外,你可以为你的DLL添加一个配置文件,但是因为管理太麻烦了,为什么不使用引用DLL的应用程序的当前配置文件呢?:)

所以,既然数据库是在MVC应用程序中创建的,我怎么能使dll模块检查到该数据库,以确保应用程序没有那个键已经,然后,保存到数据库中?

使用数据库连接字符串定位数据库。这通常在web中指定。Config或app.config,具体取决于应用程序的类型。所有对数据库具有物理访问权限(包括适当的安全凭证)的应用程序都可以使用相同的连接字符串访问相同的数据库。

DLL模块不能自己运行。它们被加载到应用程序域中(通常是web应用程序或windows应用程序)。连接字符串通常在web中提供。