In C#, SQL connection is printing: 'System.Data.SqlClient.SqlDataReader'

632 Views Asked by At

I am trying to do run an SQL statement in C#

Here is the code:

static void Main(string[] args)
{
    SqlConnection conn = new SqlConnection(
        @"Data Source=loninasd023.xx.xx.com;Initial 
        Catalog=DB.Manager.Data;Integrated Security=SSPI;");

    if (impersonateValidUser("svc_mgr", "USERNAME", "PASSWORD"))
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand(
          "SELECT [data_check_info] FROM [DB.Manager.Data].[dbo].[server_package_status]", 
          conn);

        SqlDataReader reader = cmd.ExecuteReader();

        while (reader.Read())
        {
            Console.WriteLine(reader);
        }

        reader.Close();
        conn.Close();

    }
    else
    {
        Console.WriteLine("The impersonation failed.");
        Environment.Exit(100);
    }

}

The program prints this:

System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader
System.Data.SqlClient.SqlDataReader

What am I doing wrong?

2

There are 2 best solutions below

0
On BEST ANSWER

SqlDataReader.ToString() method returns it's full-typed name of type. That's why it returns System.Data.SqlClient.SqlDataReader.

Actually, this is done by Console.WriteLine because there is no overload called Console.WriteLine(SqlDataReader) and that's why it calls Console.WriteLine(object) overload and inside this method, object.ToString() will called probably.

Read() method reads your result row by row.

You can easily get your values indexed 0 like reader[0]

while (reader.Read())
{
    Console.WriteLine(reader[0]);
}
0
On

try like this:

while (reader.Read())
{
Console.WriteLine(reader.GetInt32(0));  // for Int
//OR
Console.WriteLine(reader.GetString(0));  // for strings

}