0

我正在做的事情很简单。我只需要连接到 SQL 数据库并从表中读取信息。我确信我错过了一些愚蠢的东西。我正在使用 C#、SQL Sever 和 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

确保您的应用程序可以访问dbo架构的身份,并确保您arcObjectsdbo架构中创建。

  1. 您可以通过执行来检查登录的默认架构SELECT SCHEMA_NAME()。或者,您可以在安全 > 用户下的数据库中找到登录名并查看其属性。您可以检查默认架构以及它拥有的任何其他架构。例如,您可以将用户添加到db_owner,或者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,则应dboschema_name列下显示。如果没有,请将表格移动到dbo

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

或者,您可以浏览对象资源管理器中的表。这些表将以 [schema].[table name] 格式列出。

于 2012-06-26T17:58:23.560 回答