从“MSDB”系统表中读取数据
Posted
技术标签:
【中文标题】从“MSDB”系统表中读取数据【英文标题】:Read Data from 'MSDB' System Table 【发布时间】:2014-07-14 17:56:29 【问题描述】:在我的应用程序中,我想从 SQL Server 2012 中的数据库“MSDB”中的系统表“sysmail_mailitems”中检索 blind_copy_recipients
。我在 C# Web 应用程序中使用实体框架来查询数据库。我为sysmail_mailitems
创建了一个类以及从中读取数据的方法。但它实际上使用此名称在系统表之外创建了一个新表。我的目标不是创建一个表,而只是从现有表中读取。谁能指导我如何做到这一点?
代码:
public class sysmail_mailitem
[Key]
public Int32 mailitem_id get; set;
public Int32 profile_id get; set;
public String recipients get; set;
public String copy_recipients get; set;
public String blind_copy_recipients get; set;
public String subject get; set;
public String from_address get; set;
public String reply_to get; set;
public String body get; set;
public String body_format get; set;
public String importance get; set;
public String sensitivity get; set;
public String file_attachments get; set;
public String attachment_encoding get; set;
public String query get; set;
public String execute_query_database get; set;
public Boolean? attach_query_result_as_file get; set;
public Boolean? query_result_header get; set;
public Int32? query_result_width get; set;
public String query_result_separator get; set;
public Boolean? exclude_query_output get; set;
public Boolean? append_query_error get; set;
public DateTime send_request_date get; set;
public String send_request_user get; set;
public Int32? sent_account_id get; set;
public Byte? sent_status get; set;
public DateTime? sent_date get; set;
public DateTime last_mod_date get; set;
public String last_mod_user get; set;
public String GetMailRecipients(Int32 mailItemId)
using(MSDBContext _db = new MSDBContext())
var query = (from mailItems in _db.MailItems
where mailItems.mailitem_id == mailItemId
select mailItems).FirstOrDefault();
try
return query.blind_copy_recipients;
catch (NullReferenceException)
return "N/A";
public class MSDBContext : DbContext
public MSDBContext() : base("msdb")
public DbSet<sysmail_mailitem> MailItems get; set;
【问题讨论】:
【参考方案1】:最后我想出了使用 ExecuteStoreQuery 执行原始 sql 命令以从 MSDB 检索数据。
代码:
public String GetMailRecipients(Int32 mailItemId)
using(context _db = new context())
var obj = ((IObjectContextAdapter)_db).ObjectContext;
return obj.ExecuteStoreQuery<String>("SELECT blind_copy_recipients FROM msdb.dbo.sysmail_mailitems WHERE mailitem_id = 0", mailItemId).FirstOrDefault();
【讨论】:
【参考方案2】:如果您想以您尝试的初始方式执行此操作,使用 DBSet 等您可以执行此操作。您的问题是,当表名是 sysmail_mailitems(带有 s)时,您调用了类 sysmail_mailitem。因此,您必须像这样在类上方注释实际的表名:
[Table("sysmail_mailitems")]
public class sysmail_mailitem
【讨论】:
以上是关于从“MSDB”系统表中读取数据的主要内容,如果未能解决你的问题,请参考以下文章