0

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オブジェクトが見つからない理由を誰でも見つけられますか? ありがとう

4

1 に答える 1

1

この種の問題が発生している理由は明確ではありませんが、コードに問題はなく、わずかな変更で私のコンピューターでも機能しました。知っておくべきことは、コンピューターの MSSQL サーバーが作業している DB ファイルに対して作業しているという事実です (MDF ファイル パスは現在のように見えます)。

アクセシビリティの問題を回避するために、切り離されたデータベースに対して作業する方がはるかに優れています。

したがって、私がそれを解決するために行ったように、次の手順を実行することをお勧めします。

  1. 独立して作業するために、MSSQL サーバーから「テスト」データベースを切り離します。MSSMS -> DB を右クリック -> タスク -> デタッチ -> デタッチする「テスト」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;
    }
}
于 2013-08-11T22:37:37.037 に答える