我正在尝试使用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循环中?
该代码实际上将引发异常。您已在连接字符串中用括号将名称括起来,这将导致连接失败。更改为:
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。恕我直言,这很容易。