0

私がしていることはとても簡単です。SQLデータベースに接続して、テーブルから情報を読み取る必要があります。私は愚かな何かを見逃していると確信しています。C#、SQLサーバー、およびWPFを使用しています。示されている接続文字列は、データソースビルダーが提供したものであるため、正しいと思います。私はそれとの接続をテストし、それは成功しました。問題の解決に役立つコードと画像を添付しています。

コード:

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    con = new System.Data.SqlClient.SqlConnection();

    con.ConnectionString = "Data Source=USSW7DEVWS16\\DEVELOPER;Initial Catalog=acrGIS;Integrated Security=True";

    con.Open();
    using (SqlCommand command = new SqlCommand("SELECT * FROM dbo.acrObjects", con))
    {
        SqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            string Object = reader.GetString(0);
            string Comment = reader.GetString(1);
            string OStreet = reader.GetString(2);
            string OCity = reader.GetString(3);
            string OState = reader.GetString(4);
            string OZip = reader.GetString(5);
            string OSpec = reader.GetString(6);

            arcObjects.Add(new acrObject() { Object_Num = Object, Comments = Comment, Street = OStreet, City = OCity, State = OState, Zip = OZip, Spec = OSpec });
        }
        foreach (acrObject objects in arcObjects)
        {
           MessageBox.Show(objects.ToString());
        }
    } 

これが私のクラスとリストと接続の定義です。

class acrObject
{
    public string Object_Num {get; set;}
    public string Comments{get; set;}
    public string Street {get; set;}
    public string City {get; set;}
    public string State{get; set;}
    public string Zip {get; set;}
    public string Spec {get; set;}
    public override string  ToString()
    {
              return string.Format("Object Number: {0}, Comments: {1}, Street: {2}, City: {3}, State: {4}, Zip: {5}, Spec: {6}", Object_Num, Comments, Street, City, State, Zip, Spec);
    }
}



System.Data.SqlClient.SqlConnection con;

        List<acrObject> arcObjects = new List<acrObject>();

例外の画像:

ここに画像の説明を入力してください

それは次の行で起こります:

while (reader.Read())

さらに奇妙なのは、エラーがスローされず、すべてのコードがスキップされる場合があることです。だから、私が見つけたメッセージボックスを表示しようとすることさえ決してありません。ご協力ありがとうございました。他にご不明な点がある場合、またはコードをさらに投稿したい場合は、お知らせください。喜んで対応させていただきます。

ブレークポイントとコールスタックの表示:

ここに画像の説明を入力してください

try/catchを実行したときにスローされる例外は次のとおりです。

ここに画像の説明を入力してください

4

1 に答える 1

0

アプリケーションがスキーマにアクセスできるIDを確認し、dboスキーマで作成arcObjectsしたことも確認してdboください。

  1. を実行すると、ログインのデフォルトスキーマを確認できますSELECT SCHEMA_NAME()。または、データベースの[セキュリティ]> [ユーザー]でログインを検索し、そのプロパティを表示することもできます。デフォルトのスキーマと、それが所有する追加のスキーマを調べることができます。たとえば、ユーザーをに追加しdb_ownerたり、IDに完全な権限を持たせたくない場合はdb_datareader/に追加したりできます。db_datawriter
  2. テーブルが属するスキーマを確認します。

新しいクエリウィンドウで次のSQLを実行します。

select t.name as table_name, s.name as schema_name from sys.tables as t 
    inner join sys.schemas as s on t.schema_id = s.schema_id
where object_id = OBJECT_ID(N'arcObjects')

テーブルがに属している場合はdbo、列dboの下に表示されschema_nameます。そうでない場合は、テーブルを次の場所に移動しますdbo

 ALTER SCHEMA dbo 
 TRANSFER [schema listed in schema_name column].arcObjects

または、オブジェクトエクスプローラでテーブルを参照することもできます。テーブルは[スキーマ]。[テーブル名]の形式で一覧表示されます。

于 2012-06-26T17:58:23.560 に答える