C# 在控制台应用程序中使用数据集?
我试图弄清楚如何显示我(应该)从SQL查询中获得的信息。这是我的代码:C# 在控制台应用程序中使用数据集?,c#,sql,C#,Sql,我试图弄清楚如何显示我(应该)从SQL查询中获得的信息。这是我的代码: this.cmd = connection.CreateCommand(); this.cmd.CommandText = "SELECT * FROM servers WHERE id > " + x + " AND id < " + y; this.adapter = new MySqlDataAdapter( this.cmd ); this.
this.cmd = connection.CreateCommand();
this.cmd.CommandText = "SELECT * FROM servers WHERE id > " + x + " AND id < " + y;
this.adapter = new MySqlDataAdapter( this.cmd );
this.adapter.SelectCommand = this.cmd;
this.dataset = new DataSet();
this.adapter.Fill( dataset );
return this.dataset;
this.cmd=connection.CreateCommand();
this.cmd.CommandText=“从id>“+x+”和id<”+y的服务器中选择*;
this.adapter=新的MySqlDataAdapter(this.cmd);
this.adapter.SelectCommand=this.cmd;
this.dataset=新数据集();
this.adapter.Fill(数据集);
返回此.dataset;
当我使用控制台应用程序时,如何使用this.dataset显示信息?谢谢这是一个令人惊讶的复杂问题(但很简单)。他们使用的收集类很难使用。我提出了一个基本的实现。它不尝试在正确的列中排列行值,但输出比Juran的要好一点
foreach (DataTable table in dataSet.Tables)
{
foreach (DataRow row in table.Rows)
{
foreach (DataColumn column in table.Columns)
{
object item = row[column];
// read column and item
Console.WriteLine("item ", item );
}
}
}
主要答案在ToPrettyString()
扩展方法中。由于框架中的缺陷,大多数其他扩展方法只是为了简化工作
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var ds = new DataSet();
var customersTable = ds.Tables.Add("Customers");
customersTable.Columns.AddRange("FirstName", "LastName", "Id", "Address");
customersTable.Rows.Add("Bob", "Sagget", 1, "123 Mockingbird Lane");
customersTable.Rows.Add("John", "Doe", 2, "1600 Pennsylvanie Ave");
customersTable.Rows.Add("Jane", "Doe", 3, "100 Main St");
Console.WriteLine(ds.ToPrettyString());
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
static class ExtensionMethods
{
public static string ToPrettyString(this DataSet ds)
{
var sb = new StringBuilder();
foreach (var table in ds.Tables.ToList())
{
sb.AppendLine("--" + table.TableName + "--");
sb.AppendLine(String.Join(" | ", table.Columns.ToList()));
foreach (DataRow row in table.Rows)
{
sb.AppendLine(String.Join(" | ", row.ItemArray));
}
sb.AppendLine();
}
return sb.ToString();
}
public static void AddRange(this DataColumnCollection collection, params string[] columns)
{
foreach (var column in columns)
{
collection.Add(column);
}
}
public static List<DataTable> ToList(this DataTableCollection collection)
{
var list = new List<DataTable>();
foreach (var table in collection)
{
list.Add((DataTable)table);
}
return list;
}
public static List<DataColumn> ToList(this DataColumnCollection collection)
{
var list = new List<DataColumn>();
foreach (var column in collection)
{
list.Add((DataColumn)column);
}
return list;
}
}
}
使用系统;
使用System.Collections.Generic;
使用系统数据;
使用系统文本;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
var ds=新数据集();
var customersTable=ds.Tables.Add(“客户”);
customersTable.Columns.AddRange(“FirstName”、“LastName”、“Id”、“Address”);
customersTable.Rows.Add(“Bob”,“Sagget”,1,“123模仿鸟巷”);
customersTable.Rows.Add(“John”,“Doe”,2,“1600宾夕法尼亚大道”);
customersTable.Rows.Add(“Jane”,“Doe”,3,“100 Main St”);
Console.WriteLine(ds.ToPrettyString());
控制台。WriteLine(“按任意键退出”);
Console.ReadKey();
}
}
静态类扩展方法
{
公共静态字符串ToPrettyString(此数据集为ds)
{
var sb=新的StringBuilder();
foreach(ds.Tables.ToList()中的var表)
{
sb.附录行(“--”+table.TableName+“--”);
sb.AppendLine(String.Join(“|”,table.Columns.ToList());
foreach(table.Rows中的DataRow行)
{
sb.AppendLine(String.Join(“|”,row.ItemArray));
}
(某人);
}
使某人返回字符串();
}
公共静态void AddRange(此DataColumnCollection集合,参数字符串[]列)
{
foreach(列中的var列)
{
集合。添加(列);
}
}
公共静态列表列表(此DataTableCollection集合)
{
var list=新列表();
foreach(集合中的var表)
{
列表.添加((数据表)表);
}
退货清单;
}
公共静态列表列表(此DataColumnCollection集合)
{
var list=新列表();
foreach(集合中的var列)
{
列表。添加((数据列)列);
}
退货清单;
}
}
}
输出:
--顾客--
名|姓| Id |地址
Bob | Sagget | 1 | 123模仿鸟巷
约翰|多伊| 2 | 1600宾夕法尼亚大道
简|多伊| 3 | 100大街
查询结果将位于数据集中的第一个表(也是唯一的表)中。简单地拿第一个表,循环抛出行,打印出数据。我不完全理解如何做到这一点,你有一个例子吗?看看这篇文章,看看这是否有帮助。要非常小心使用这样的字符串替换将值放入sql查询中。这是一个让你的应用程序被黑客攻击的好方法。它打印所有的值,每行一个值。我想这会有点难看。您是否可以对实现进行修饰,以打印所有列标题,然后为每行指定一行?@user2454991没有指定如何显示它。只是给他一些暗示。对,最好添加列标题