DataContext无效对象

本文关键字:对象 无效 DataContext | 更新日期: 2023-09-27 18:27:08

我使用的是VS2010 C#Express和MS SQL Server 2012。

使用C#,我试图查询我创建的测试数据库。

我的C#代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Data.Linq;
    using System.Data.Linq.Mapping;
    using System.Text;
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                DataContext db = new DataContext("C:''Program Files''Microsoft SQL         Server''MSSQL10.SQLEXPRESS''MSSQL''DATA''test.mdf");
                Table<Portfolios> PORTFOLIO = db.GetTable<Portfolios>();
                var q =
                    from c in PORTFOLIO
                    where c.PORTF_CODE == "PTF1"
                    select c;
                Console.WriteLine(q);
                foreach (var portf in q)
                {
                    Console.WriteLine("id = {0}, City = {1}", portf.PORTF_CODE,         portf.PORTF_NAME);
                    Console.ReadLine();
                }
            }
        }
        [Table(Name = "PORTFOLIO")]
        public class Portfolios
        {
            [Column(IsPrimaryKey = true)]
            public int PORTF_ID;
            [Column]
            public string PORTF_CODE;
            [Column]
            public string PORTF_NAME;
            [Column]
            public int BENCH_ID;
            [Column]
            public int CCY_ID;
        }
    }

我试图查询的PORTFOLIO表是使用以下代码创建的:

CREATE TABLE PORTFOLIO
( PORTF_ID      INT             IDENTITY(10000, 1)          PRIMARY KEY CLUSTERED
, PORTF_CODE    VARCHAR(25)     NOT NULL
, PORTF_NAME    VARCHAR(200)    NOT NULL
, BENCH_ID      INT             
, CCY_ID        INT)
INSERT INTO PORTFOLIO(PORTF_CODE, PORTF_NAME)
VALUES('PTF1', 'PTF1 - Portfolio 1');

创建完以上内容后,我将分离数据库并运行c代码。我遇到的错误是当我跨过代码行时:

foreach (var portf in q)

错误显示:对象名称"PORTFOLIO"无效。我认为这意味着它在我的数据库中找不到PORTFOLIO对象,但我已经检查了好几次它在那里,而且里面有数据。我甚至重新创建了好几遍数据库来确定。

有人能发现为什么找不到PORTFOLIO对象吗?感谢

DataContext无效对象

目前还不清楚您遇到这种问题的原因,但您的代码没有任何问题,只需进行一些修改,我的计算机也能正常工作。您应该注意的是,您正在处理计算机中MSSQL服务器也在处理的DB文件(就像您的MDF文件路径现在看起来一样)。

为了避免可访问性问题,最好使用分离的数据库。

因此,我建议你像我一样采取以下步骤来解决它:

  1. 从MSSQL服务器分离"测试"数据库,以便独立处理:在MSSMS->右键单击数据库->任务->分离->选择要分离的"测试"DB。

  2. 打开此文件夹:"C:''Program Files''Microsoft SQL Server''MSSQL10.SQLEXPRESS ''MSSQL''DATA",并将test.mdf和test_log.ldf文件复制到"C:''Databases"(首先创建此文件夹)。

  3. 我已经更改了你的代码,所以复制并尝试运行它:

using System;
using System.Data.Linq;
using System.Data.Linq.Mapping;
using System.Linq;
namespace ConsoleApplication1
{
    static class Program
    {
        static void Main()
        {
            var db = new DataContext("C:''Databases''test.mdf");
            var portfolio = db.GetTable<Portfolios>();
            var result =
                from c in portfolio
                where c.PORTF_CODE == "PTF1"
                select c;
            foreach (var item in result)
            {
                Console.WriteLine("id = {0}, City = {1}", item.PORTF_CODE, item.PORTF_NAME);
            }
            Console.ReadLine();
        }
    }
    [Table(Name = "PORTFOLIO")]
    public class Portfolios
    {
        [Column(IsPrimaryKey = true)]
        public int? PORTF_ID;
        [Column]
        public string PORTF_CODE;
        [Column]
        public string PORTF_NAME;
        [Column]
        public int? BENCH_ID;
        [Column]
        public int? CCY_ID;
    }
}