我正在尝试连接到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循环中?
答案 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。恕我直言。