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对象吗?感谢
目前还不清楚您遇到这种问题的原因,但您的代码没有任何问题,只需进行一些修改,我的计算机也能正常工作。您应该注意的是,您正在处理计算机中MSSQL服务器也在处理的DB文件(就像您的MDF文件路径现在看起来一样)。
为了避免可访问性问题,最好使用分离的数据库。
因此,我建议你像我一样采取以下步骤来解决它:
-
从MSSQL服务器分离"测试"数据库,以便独立处理:在MSSMS->右键单击数据库->任务->分离->选择要分离的"测试"DB。
-
打开此文件夹:"C:''Program Files''Microsoft SQL Server''MSSQL10.SQLEXPRESS ''MSSQL''DATA",并将test.mdf和test_log.ldf文件复制到"C:''Databases"(首先创建此文件夹)。
-
我已经更改了你的代码,所以复制并尝试运行它:
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;
}
}