C#SQL Select Query仅转储一列

时间:2015-06-03 14:22:41

标签: c# sql select

我无法连接SQL并运行简单的选择查询,我需要将select * from ServerInfo where ServerID = 1991638835"输出到控制台行或txt文件:

这是我的代码:

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Text;

namespace ConnectingToSQLC
{
    class Program
    {
        static void Main(string[] args)
        {
            SqlConnection conn = new SqlConnection("server= XXXXX; database = ES1Archive; Integrated Security=false; User ID = sa; Password=XXXXXX");
            conn.Open();
            SqlCommand cmd = new SqlCommand("select * from ServerInfo  where ServerID = 1991638835", conn);

            SqlDataReader reader = cmd.ExecuteReader ();
            while (reader.Read())
            {
            //Console.WriteLine ("{1}", "{0}", reader.GetString (0), reader.GetString (1));
                Console.WriteLine(reader.GetString(3));
            }
            reader.Close();
            conn.Close();

            if (Debugger.IsAttached)
            {
                Console.ReadLine(); 
            }

      }
    }
}

它工作正常。但如果我改变了 Console.WriteLine ("{1}", "{3}", reader.GetString (1), reader.GetString (3));我总是有第2列。总共有7列,第3列是空的,而第4列是XML。

如何修改我的代码以转储所有内容?

2 个答案:

答案 0 :(得分:3)

你有太多的格式化字符串 - 将它们合并为一个,例如:

Console.WriteLine ("{0} - {1}", reader.GetString(1), reader.GetString(3))

Console.WriteLine overload you are using格式化字符串的索引类似于string.Format - 它不依赖于您在阅读器中使用的 索引, format参数占位符只需匹配其他params args参数的 order

此外:

  • 一般情况下使用SELECT *是不好的做法,当按顺序索引访问数据读取器列时更是危险,因为表中的更改会破坏您的读者代码。建议您明确命名您正在使用的列和/或使用reader
  • 的列名访问者
  • 如果读者的唯一用途是Console.WriteLine上的字符串输出,则不需要使用Get<Type>()重载 - 您只需使用序数访问器(在您保证之后)具有显式列名SELECT的列的顺序: - )

e.g。对于读者第1,3和6列(当然是零):

Console.WriteLine ("{0} - {1} - {2}", reader[1], reader[3], reader[6]);

但更好的是:

Console.WriteLine ("{0} - {1} - {2}", reader["RealNameOfCol1"], 
                                      reader["RealNameOfCol3"], reader["RealNameOfCol6"]);

答案 1 :(得分:0)

您可以使用IDataRecord接口循环执行此操作:

class Program
{
   static void Main(string[] args)
   {
       SqlConnection conn = new SqlConnection("server= XXXXX; database = ES1Archive; Integrated Security=false; User ID = sa; Password=XXXXXX");
       conn.Open();
       SqlCommand cmd = new SqlCommand("select * from ServerInfo  where ServerID = 1991638835", conn);

       SqlDataReader reader = cmd.ExecuteReader ();
       while (reader.Read())
       {
            for(int i = 0; i<reader.FieldCount;i++)
            {
                Console.WriteLine(reader[i]);
            }
       }
       reader.Close();
       conn.Close();

       if (Debugger.IsAttached)
       {
           Console.ReadLine(); 
       }

 }
}