首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取器未读取数据

读取器未读取数据
EN

Stack Overflow用户
提问于 2010-12-10 19:32:43
回答 3查看 1.7K关注 0票数 0

我有一个这样的函数

代码语言:javascript
复制
try
    {


        using(var sConnection = new SqlConnection(ConnectionString))
        using(var sCommand = sConnection.CreateCommand())
        {
            sCommand.CommandText = @"SELECT 
                                           TABLE_NAME
                                          AS
                                           TABLES
                                        FROM 
                                           INFORMATION_SCHEMA.TABLE_CONSTRAINTS
                                       WHERE 
                                           CONSTRAINT_TYPE = 'PRIMARY KEY'
                                         AND
                                           TABLE_NAME <> 'dtProperties'
                                    ORDER BY
                                           TABLE_NAME";
            sConnection.Open();
            using(var reader = sCommand.ExecuteReader()) // Troublesome line
            {                    
                while(reader.Read())
                {
                    sb.AppendLine(reader.GetString(0));
                }
            }
        }

    }
    catch(Exception ex)
    {
        //All the exceptions are handled and written in the EventLog. 
        EventLog log = new EventLog("Application");
        log.Source = "MFDBAnalyser";
        log.WriteEntry(ex.Message);
    }
    return sb.ToString();
}

在调试时,它会给出结果,直到连接打开,但var Reader没有读取数据。

谁能指出错误在哪里!!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-29 19:30:18

您提供的代码与您运行的代码相同吗?

如果你有自初始化的get属性,在调试中“工作”而不是在运行时,通常会发生奇怪的行为。如下所示:

代码语言:javascript
复制
private string _name;

public string Name
{
  get {
    if (_name == null)
    {
      name = string.Empty;
    }
    return _name;
  }
  set {_name = value;}
}

因此,如果你直接使用_name,而调试器显示这样的属性,它会在使用之前“意外地”初始化你的属性。

票数 0
EN

Stack Overflow用户

发布于 2010-12-10 20:10:34

在MSDN中可以看到:Reader

代码语言:javascript
复制
    while (reader.Read())
    {
        Console.WriteLine(String.Format("{0}", reader[0]));
    }

所以也许可以尝试使用reader[0]而不是reader.getString(0)

编辑

试试这个:

代码语言:javascript
复制
    public Form1()
    {
        InitializeComponent();

        String ConnectionString = @"Data Source=SERVER\SQLEXPRESS;Initial Catalog=DBNAME;User ID=USER;Password=PWD";

        StringBuilder sb = new StringBuilder();
        using (SqlConnection sConnection = new SqlConnection(ConnectionString))
        {
            String query = @"SELECT TABLE_NAME AS TABLES FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_NAME <> 'dtProperties' ORDER BY TABLE_NAME";
            SqlCommand comand = new SqlCommand(query, sConnection);
            sConnection.Open();
            SqlDataReader reader = comand.ExecuteReader();

            if (reader.HasRows)
            {
                Console.WriteLine("reader.hasRows == true !");
            }
            else
            {
                Console.WriteLine("reader.hasRows == FALSE !");
            }

            while (reader.Read())
            {
                sb.AppendLine(reader.GetString(0));
            }
        }

        Console.WriteLine(sb.ToString());
    }
}

看看它能不能用。

我创建了一个新的Winform应用程序,试过了,它对我很有效。

下面是我的输出:

代码语言:javascript
复制
reader.hasRows == true !
Categorie
Chantier
...
And all my table names.
票数 0
EN

Stack Overflow用户

发布于 2010-12-10 21:15:54

尝试在创建sCommand之前放置sConnection.Open()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4408385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档