C#SQL选择查询只转储一列

本文关键字:一列 转储 选择 查询 C#SQL | 更新日期: 2023-09-27 17:52:55

我在连接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。

如何修改代码以转储所有代码?

C#SQL选择查询只转储一列

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

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

您正在使用的Console.WriteLine重载的格式化字符串的索引与string.Format类似-它不依赖于您在读取器中使用的索引,格式参数占位符只需要匹配其他params args参数的顺序。

还有:

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

例如,对于读卡器列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"]);

您可以使用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(); 
       }
 }
}