小编典典

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

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循环中?


阅读 207

收藏
2021-04-14

共1个答案

小编典典

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

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

请注意,当Trusted_Connection为true(Windows身份验证)时,您不使用UserID和Password。

编辑:附加说明。

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

根据读者,而不是reader.GetValue [i],您可以使用reader [index]并将类型强制转换为应具有的形式:

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

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

EDIT2:不要跳过研究LINQ。恕我直言,这很容易。

2021-04-14