我正在使用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对象了吗?感谢
答案 0 :(得分:1)
为什么你遇到这种问题并不是很清楚,但你的代码没有任何问题,只需要很少的修改就可以在我的电脑上运行。您应该注意的是,您正在对计算机中的MSSQL服务器正在使用的DB文件进行操作(因为您的MDF文件路径现在看起来像)。
与 分离的 数据库一起工作会更好,以避免可访问性问题。
因此,我建议您按照以下步骤解决问题:
从MSSQL服务器分离您的“测试”数据库,以便独立地对其进行处理:在MSSMS - &gt;右键单击您的数据库 - &gt;任务 - &gt;分离 - &gt;选择要分离的“测试”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;
}
}