DataContext无效对象

时间:2013-08-11 11:42:44

标签: c# linq

我正在使用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)

错误说明:无效的对象名称&#39; PORTFOLIO&#39;。 我认为这意味着它无法在我的数据库中找到PORTFOLIO对象,但我已多次检查它是否在那里并且其中有数据。我甚至已经多次重建数据库以确定。

有人能说出为什么它找不到PORTFOLIO对象了吗?感谢

1 个答案:

答案 0 :(得分:1)

为什么你遇到这种问题并不是很清楚,但你的代码没有任何问题,只需要很少的修改就可以在我的电脑上运行。您应该注意的是,您正在对计算机中的MSSQL服务器正在使用的DB文件进行操作(因为您的MDF文件路径现在看起来像)。

分离的 数据库一起工作会更好,以避免可访问性问题。

因此,我建议您按照以下步骤解决问题:

  1. 从MSSQL服务器分离您的“测试”数据库,以便独立地对其进行处理:在MSSMS - &gt;右键单击您的数据库 - &gt;任务 - &gt;分离 - &gt;选择要分离的“测试”DB。

  2. 打开此文件夹:“C:\ Program Files \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ DATA”并将test.mdf和test_log.ldf文件复制到“C:\ Databases”(创建此文件夹)第一)。

  3. 我稍微更改了您的代码,请复制并尝试运行它:

  4. 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;
        }
    }