指定的表不存在[实体]

时间:2013-07-29 16:20:03

标签: c# sql

我花了好几个小时试图弄清楚为什么我的数据库找不到表格我找到了很多例子,似乎没有任何帮助。我已经创建了一个单独的类来处理数据库操作,所以我可以在多个页面上使用它。 这是代码

  [Table]
public class MatchItem
{
    [Column(IsPrimaryKey = true, CanBeNull=false,IsDbGenerated=true)]
    public int MatchID { get; set; }
    [Column(CanBeNull = false)]
    public string MatchNumber { get; set; }
    [Column(CanBeNull = false)]
    public string EventName { get; set; }
    [Column(CanBeNull = false)]
    public DateTime Time { get; set; }
    [Column(CanBeNull = false)]
    public string[] RedTeams { get; set; }
    [Column(CanBeNull = false)]
    public string[] BlueTeams { get; set; }
    [Column(CanBeNull = false)]
    public int RedFinal { get; set; }
    [Column(CanBeNull = false)]
    public int BlueFinal{ get; set; }
}

这是数据上下文

public class MatchDataContext:DataContext
{
    public MatchDataContext(string connectionString) :
        base(connectionString)
    {
    }
    public Table<MatchItem> Matches
    {
        get
        {
            return this.GetTable<MatchItem>();
        }
    }
}

我上了课,所以我可以在多个页面上使用它

public class MatchDBManager
{
    private static string connectionString = @"Data Source=isostore:/DB.sdf";

    public MatchDBManager()
    {

        initialize();
    }

    public void initialize()
    {
        using (MatchDataContext Mchdb = new MatchDataContext(connectionString))
        {

            if (Mchdb.DatabaseExists())
            {
                Console.WriteLine("DB already exists");
            }
            else
            {
                Mchdb.CreateDatabase();
                Console.WriteLine("DB created");
            }
        }
    }
    public void addMatchData(IList<MatchItem> data)
    {
        //this.clearData();
        //initialize();
        using (MatchDataContext Mchdb = new MatchDataContext(connectionString))
        {
            Mchdb.Matches.InsertAllOnSubmit(data);
            Mchdb.SubmitChanges();
        }

    }
    public IList<MatchItem> getTeamData(string teamNum)
    {
        IList<MatchItem> MatchList = null;
        using (MatchDataContext Mchdb = new MatchDataContext(connectionString))
        {

            IQueryable<MatchItem> mchQuery = from mch in Mchdb.Matches where (mch.RedTeams[0] == teamNum || mch.RedTeams[1] == teamNum || mch.RedTeams[2] == teamNum || mch.BlueTeams[0] == teamNum || mch.BlueTeams[1] == teamNum || mch.BlueTeams[2] == teamNum) select mch;
            MatchList = mchQuery.ToList();

        }
        return MatchList;
    }
    public IList<MatchItem> getEventData(string eventID)
    {
        IList<MatchItem> MatchList = null;
        using (MatchDataContext Mchdb = new MatchDataContext(connectionString))
        {
            IQueryable<MatchItem> mchQuery = from mch in Mchdb.Matches where mch.Event == eventID select mch;
            MatchList = mchQuery.ToList();
        }
        return MatchList;
    }
    private void clearData()
    {
        using (MatchDataContext Mchdb = new MatchDataContext(connectionString))
        {

            if (Mchdb.DatabaseExists())
            {
                Mchdb.DeleteDatabase();

            }
        }
    }
}

我有错误指定的表不存在[匹配]。

这里添加的是我下载的地方

   public IList<MatchItem> ParseXML(XmlReader reader)
    {
        //List<string> save = new List<string>();
        List<MatchItem> MatchList= new List<MatchItem>();
        XElement matchData;
        matchData = XElement.Load(reader);
        StringBuilder output = new StringBuilder();
        int count = 0;
        var matches = from item

                         in matchData.Elements("match")

                      select item;

        foreach (XElement eachmatch in matches)
        {
            MatchItem mch = new MatchItem();
           string Time = ((eachmatch.Element("pubdate").Value).ToString());
            mch.EventName = ((eachmatch.Element("event").Value).ToString());
            mch.MatchNumber = ((eachmatch.Element("mch").Value).ToString() + (eachmatch.Element("typ").Value).ToString());
            string[] RT = { eachmatch.Element("red1").Value.ToString(), eachmatch.Element("red2").Value.ToString(), eachmatch.Element("red3").Value.ToString() };
            string[] BT = { eachmatch.Element("blue1").Value.ToString(), eachmatch.Element("blue2").Value.ToString(), eachmatch.Element("blue3").Value.ToString() };
            string RF = ((eachmatch.Element("rfin").Value).ToString());
            string BF = ((eachmatch.Element("bfin").Value).ToString());
           // Time = Time.Substring(0, (Time.IndexOf("+") - 1));
            mch.Time = DateTime.Parse(Time);
            mch.RedTeams = RT;
            mch.BlueTeams = BT;
            mch.RedFinal = int.Parse(RF);
            mch.BlueFinal= int.Parse(BF);
            mch.MatchID = count;
            count += 1;


            MatchList.Add(mch);
        }
        return MatchList;

    }

这就是我称之为这种方法的地方

void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {

 initializeDB();
        if (e.Error == null)
        {
            XmlReader reader = XmlReader.Create(new StringReader(e.Result));
            DownloadInfo di = new DownloadInfo();
            IList <MatchItem>data= di.ParseXML(reader);
            outputer(data);
            addData(data.ToList<MatchItem>());
        }
        else
        {
            IList<MatchItem> data = getTeamData(strMyTeam);
            outputer(data);
        }
}

我最终删除了DatabaseManager类并将函数放在主代码中 然后我将它们输出到这里的屏幕

 public void outputer(IList<MatchItem> mch)
    {
        for (int i = 0; i < mch.Count; i++)
        {
            Score sc = new Score();

            sc.Width = lsbData.Width;
            sc.Height = sc.Height;
            sc.Time = mch[i].Time.ToString();
            sc.Event = mch[i].EventName;
            sc.RT = mch[i].RedTeams[0] + "  " + mch[i].RedTeams[1] + "  " + mch[i].RedTeams[2];
            sc.BT = mch[i].BlueTeams[0] + "  " + mch[i].BlueTeams[1] + "  " + mch[i].BlueTeams[2];
            sc.RF = mch[i].RedFinal.ToString();
            sc.BF = mch[i].BlueFinal.ToString();
            lsbData.Items.Add(sc);
        }

    }

* 注意:得分是一个自定义控件,在数据库代码*

之前工作(和工作)

1 个答案:

答案 0 :(得分:1)

我看不到您实际创建Match对象的位置。

如果您还需要在问题中包含该代码。如果你还没有,那就解释了为什么它不存在。

<强>加成

为了将Match对象添加到列表中,您必须先创建对象,然后将它们添加到列表中,我认为您无法在创建每个对象之前创建整个对象列表。

更多附加信息

在您向其添加项目之前,仍需要创建对象。这就是错误告诉你的。您没有要插入数据的对象。

Match Table1 = new Match();

这将创建一个新的Match对象,允许您访问对象的各个部分并将数据插入到对象中

Table1.MatchNumber = 42

除非为该特定人员留出该内存位置并为其命名,否则无法将内容添加到内存位置。

当你创建该类时,你可以添加函数和各种有趣的东西,但在创建Match对象之前你不能使用它们。

您无法向不存在的列表添加内容,您必须先创建Match对象,然后将其添加到列表中