【问题标题】:DataTable Issue数据表问题
【发布时间】:2012-07-03 14:43:53
【问题描述】:
  public class InnovationSubmission
    {
        public OleDbConnection connectr = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=DatabaseTEST.accdr;Jet OLEDB:Database Password=DWPOIT");
        public OleDbDataAdapter Adaptor = new OleDbDataAdapter();



        private List<SelectListItem> _Area = new List<SelectListItem>();
        private List<SelectListItem> _Team = new List<SelectListItem>();


        public int ID { get; set; }
        [Required(ErrorMessage="Please enter a short description")]
        public string ShortDescription { get; set; }
        [Required(ErrorMessage = "Please enter a detailed description")]
        public string DetailedDescription { get; set; }
        public string Status { get; set; }

        [Required(ErrorMessage = "Please enter your name")]
        public string Originator { get; set; }

        [Required(ErrorMessage = "Please enter your email address")]
        [RegularExpression(".+\\@.+\\..+",
        ErrorMessage = "Please enter a valid email address")]
        public string OriginatorEmail { get; set; }
        [Required]
        public string SelectedArea { get; set; }
        [Required]
        public string SelectedTeam { get; set; }


        public List<SelectListItem> Area
        {
            get { return _Area; }
        }

        public List<SelectListItem> Teams
        {
            get 
            {

                string SQLSelect = ("SELECT * FROM Teams");
                OleDbCommand sCommand = new OleDbCommand(SQLSelect, connectr);
                Adaptor.SelectCommand = sCommand;


                connectr.Open();
                Adaptor.Fill(areaTable);
                connectr.Dispose();

                foreach (DataRow row in areaTable.Rows)
                {
                    _Team.Add(new SelectListItem() { Text = row[1].ToString(), Value = row[1].ToString() });

                }

                return _Team;
            }
        }

        public DataTable areaTable = new DataTable();


        }
}

【问题讨论】:

  • 什么是connector? (请注意,对属性访问执行数据库获取操作非常臭。您还应该使用 using 语句,并且每次都使用新连接。)
  • 它是一个 OledBconnection 对象,当我创建该类的新实例时,我想在该特定类的其他 2 个不同部分中使用 Datatable。
  • 确定连接没有在其他地方打开?
  • 它是唯一打开连接的网段。
  • 如果这是唯一使用连接器的部分,为什么不在此处定义?在那里你可以确定它发生了什么..

标签: c# database asp.net-mvc-3 ado.net ole


【解决方案1】:

在我看来,您的连接器对象有问题。可能它在其他地方使用过,这就是你得到异常的原因。打开新连接,进行查询并关闭它。尝试使用using 来实现这一点并在 using 块中进行查询。

此外,正如 cmets 中已经提到的 - 在属性 getter 中执行 db 查询不是一个好主意。看起来很奇怪,很老套...

【讨论】:

    【解决方案2】:

    这样用就好了!

     public List<SelectListItem> Teams
            {
                get 
                {
    
                    string SQLSelect = ("SELECT * FROM Teams");
                    OleDbCommand sCommand = new OleDbCommand(SQLSelect, connector);
                    Adaptor.SelectCommand = sCommand;
    
    
                    connector.Open();
                    Adaptor.Fill(areaTable);
                    connector.Dispose();
    
                    foreach (DataRow row in areaTable.Rows)
                    {
                        _Team.Add(new SelectListItem() { Text = row[1].ToString(), Value = row[1].ToString() });
    
                    }
    
                    return _Team;
                }
            }
    

    【讨论】:

    • 如果您想提供更多信息而不是回答问题,您应该更新您的问题。我确定问题出在连接器内或您声明连接器的位置。您能否在您的问题中移动该部分并添加连接器,我相信您会得到您正在寻找的答案。
    猜你喜欢
    • 1970-01-01
    • 2012-01-14
    • 2010-12-22
    • 2019-10-31
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多