-1

我使用 SqlCommand 从 .sql 文件执行脚本查询。

我用 ExecuteReader 得到结果。

但是值是非公共成员,我无法访问它。

知道为什么以及如何解决这个问题吗?

代码

string root = AppDomain.CurrentDomain.BaseDirectory;
string script = File.ReadAllText(root + @"..\SGBD\select_user_from_all_bases.sql");
string connectionString = @"Data Source=(local);Integrated Security=SSPI";
var conn = new SqlConnection(connectionString);

conn.Open();

var users = new SqlCommand(script, conn).ExecuteReader();

foreach (var user in users)
{

}

conn.Close();

在此处输入图像描述

4

2 回答 2

1

这是因为 ExecuteReader() 返回的是 SqlDataReader,而不是条目。

查看 SqlDataReader 的文档以了解您应该如何做

private static void ReadOrderData(string connectionString)
{
    string queryString =
        "SELECT OrderID, CustomerID FROM dbo.Orders;";

    using (SqlConnection connection =
               new SqlConnection(connectionString))
    {
        SqlCommand command =
            new SqlCommand(queryString, connection);
        connection.Open();

        SqlDataReader reader = command.ExecuteReader();

        // Call Read before accessing data.
        while (reader.Read())
        {
            Console.WriteLine(String.Format("{0}, {1}", reader[0], reader[1]));
        }

        // Call Close when done reading.
        reader.Close();
    }
}
于 2012-11-26T14:17:19.160 回答
0

如前所述,您可能不应该使用foreach. 出于兼容性原因,需要实现它,但while (reader.Read())这里的循环更简单。也就是说,您可以根据foreach需要使用任何方式。这些user值实现IDataRecord了,您可以使用该接口来访问这些值。

foreach (IDataRecord user in reader)
{
    // access user[0], user["field"], etc. here
}
于 2012-11-26T14:21:42.777 回答