在C#控制台应用程序中显示SQL数据库中的值

时间:2018-07-19 17:22:45

标签: c# sql

我正在尝试连接到C#中的数据库并显示某些数据点。该数据库有许多列和表,我只想使用Writeline()在控制台中显示它们。以下是到目前为止的内容。该代码运行无错误,但也不显示任何内容。

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

namespace SQLIntro
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SqlConnection connection = new SqlConnection("Server=[SQ_SIXTEEN];Database=[PocketCentral];User ID=[un];Password=[pw];Trusted_Connection=true"))
            {
                connection.Open();
                using (SqlCommand command = new SqlCommand("SELECT * FROM tbl_Terminal", connection))
                {
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            for (int i = 0; i < reader.FieldCount; i++)
                            {
                                Console.WriteLine(reader.GetValue(i));
                            }
                            Console.WriteLine();
                        }
                    }
                }
            }
        }
    }
}

一件事是列信息的去向... SQL命令?还是在while循环中?

1 个答案:

答案 0 :(得分:1)

该代码实际上将引发异常。您已在连接字符串中用括号将名称括起来,这将导致连接失败。更改为:

using (SqlConnection connection = new SqlConnection("Server=SQ_SIXTEEN;Database=PocketCentral;Trusted_Connection=true"))

请注意,当Trusted_Connection为true(Windows身份验证)时,您将不使用用户名和密码。

编辑:附加说明。

您通常会知道数据内容(列名和类型)。从SQL的角度来看,建议您列出所有列。即:与其简单地使用“选择*”,不如使用“选择名字,姓氏,...从...中”。

根据读者,而不是reader.GetValue [i],您使用reader [index]并将类型强制转换为应该的样子:

(int)reader[0]
(DateTime)reader["OrderDate"]

整数索引速度更快,但取决于列位置,在该位置上具有列名称的字符串索引更易读。

EDIT2:不要跳过研究LINQ。恕我直言。