Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从数据库获取信息和字段名,并在控制台应用程序中将它们对齐_C#_Sql Server - Fatal编程技术网

C# 从数据库获取信息和字段名,并在控制台应用程序中将它们对齐

C# 从数据库获取信息和字段名,并在控制台应用程序中将它们对齐,c#,sql-server,C#,Sql Server,基本上,我是从一个数据库中获取信息,我已经设法做到了这一点。现在,我需要获取要在控制台应用程序中显示的列名。我还尝试将它们与sql server 2012中显示的一样对齐。现在,我已经尝试获取列名,但它不想工作,我被卡住了。感谢您的帮助。下面是我的代码 using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using Sy

基本上,我是从一个数据库中获取信息,我已经设法做到了这一点。现在,我需要获取要在控制台应用程序中显示的列名。我还尝试将它们与sql server 2012中显示的一样对齐。现在,我已经尝试获取列名,但它不想工作,我被卡住了。感谢您的帮助。下面是我的代码

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Mail;
using System.Net;

namespace sql_connection
{
class Program
{
    static void Main(string[] args)
    {                             
        string conn = null;
        SqlConnection connection;
        conn= ("Data Source=database\\SQL2012;Initial Catalog=jobs;User ID=user;Password=passs");

        connection = new SqlConnection(conn);
        try{

            connection.Open();
            Console.WriteLine("Connection Open!");
            SqlCommand cmd = new SqlCommand("SELECT [jobs].[dbo].[table hours].whd_Date,[jobs].[dbo].[table hours].whd_FromTime,[jobs].[dbo].[table hours].whd_ToTime, [jobs].[dbo].[table hours].whd_User,[jobs].[dbo].[table login].login_Email FROM [jobs].[dbo].[table hours]INNER JOIN [jobs].[dbo].[table login] ON [jobs].[dbo].[table hours].whd_User = [jobs].[dbo].[table login].login_LoginId WHERE  DATEDIFF(DAY,[whd_Date],GETDATE())<=7 AND   (whd_ToTime = '' OR whd_ToTime IS NULL) AND(whd_User=login_LoginId)");
            cmd.Connection = connection;
            SqlDataReader reader = cmd.ExecuteReader();
            var columns = new List<string>();
            for (int i = 0; i < reader.FieldCount; i++)
            {
                columns.Add(reader.GetName(i));
            }

            var list = new List<string>();

            while(reader.Read())
            {

                for (int i = 0; i < reader.FieldCount; i++)
                {
                    columns.Add(reader.GetName(i));
                }
                  var s = string.Format("{4},{3},{2}, {1}, {0}",
                   reader["whd_ToTime"] == DBNull.Value? "NULL" : reader["whd_ToTime"].ToString(), 
                   reader["whd_FromTime"] == DBNull.Value? "NULL" : reader  ["whd_FromTime"].ToString(), 
                   reader["whd_Date"].ToString(), 
                   reader["whd_User"].ToString(),
                   reader["login_Email"].ToString());
                  Console.WriteLine(i);
                Console.WriteLine(s);
                list.Add(s);




            }

            var sb = new StringBuilder();
            foreach (var s in list)
            {
                sb.AppendLine(s);
            }



            connection.Close();

             MailAddress to = new MailAddress("email@gmail.com");


            MailAddress from = new MailAddress("email@gmail.com");

            MailMessage mail = new MailMessage(from, to);


            mail.Subject = ("missed punch clock");

            mail.Body = sb.ToString();

            SmtpClient smtp = new SmtpClient();
            smtp.Host = "smtp.gmail.com";
            smtp.Port = 587;

            smtp.Credentials = new NetworkCredential(
                "email@gmail.com", "passworrd");
            smtp.EnableSsl = true;
            Console.WriteLine("Sending email..");
            smtp.Send(mail);
        } 




        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }                       
    }
}
}
使用系统;
使用System.Collections.Generic;
使用System.Data.SqlClient;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Net.Mail;
Net系统;
名称空间sql\u连接
{
班级计划
{
静态void Main(字符串[]参数)
{                             
字符串conn=null;
SqlConnection连接;
conn=(“数据源=数据库\\SQL2012;初始目录=作业;用户ID=用户;密码=密码”);
连接=新的SqlConnection(conn);
试一试{
connection.Open();
Console.WriteLine(“连接打开!”);

SqlCommand cmd=new SqlCommand(“选择[jobs].[dbo].[table hours].whd_日期[jobs].[dbo].[table hours].whd_FromTime[jobs].[dbo].[table hours].whd_用户[jobs].[dbo].[table login].登录[jobs].[dbo].[table hours]内部连接[jobs].[dbo].[table login].[jobs].[dbo].[table hours].[table login].[table login]在[jobs].[dbo].[table hours].[table hours]上登录[whd_用户]。[dbo].[table login].login\u LoginId WHERE DATEDIFF(DAY,[whd_Date],GETDATE())
Systems.Collections.Generic.List'1[System.String]
是在
列表上使用
.ToString()
方法得到的,所以我猜
控制台.WriteLine(I);
实际上是
控制台.WriteLine(List)

如果我是正确的,那么您应该将其替换为
Console.WriteLine(string.Join(“,”,list.ToArray());

要正确对齐输出,可以使用制表符(
“\t”
)而不是字符串之间的空格:

var s = string.Format("{4}\t, {3}\t, {2}\t, {1}\t, {0}";

Console.WriteLine(string.Join("\t,", list.ToArray()).TrimEnd(","));
Console.WriteLine(s);

不工作是什么意思?您收到任何异常或错误消息吗?您是否调试了代码并查看了值?而不是它给我的列名“Systems.Collections.Generic.List'1[System.String]“具体在哪一行?在命令提示符中,它首先显示该行,然后显示itokay下的信息,因此这是我的错,现在我如何将它们对齐,就像它们在数据库中一样?您可能希望在列之间使用多个选项卡。”