Wil*_*iam 22 c# sql-server datatable
目前,我有通过SQL连接查找数据库表的代码,并将前五行插入Datatable(表).
using(SqlCommand _cmd = new SqlCommand(queryStatement, _con))
{
DataTable Table = new DataTable("TestTable");
SqlDataAdapter _dap = new SqlDataAdapter(_cmd);
_con.Open();
_dap.Fill(Table);
_con.Close();
}
Run Code Online (Sandbox Code Playgroud)
然后,我如何将此表的内容打印到控制台供用户查看?
在挖掘之后,我是否可能将内容绑定到列表视图,或者有没有办法直接打印它们?我不关心现阶段的设计,只关心数据.
任何指针都会很棒,谢谢!
Ars*_*had 36
你可以试试这段代码:
foreach (DataRow dataRow in Table.Rows)
{
foreach (var item in dataRow.ItemArray)
{
Console.WriteLine(item);
}
}
Run Code Online (Sandbox Code Playgroud)
更新1
DataTable Table = new DataTable("TestTable");
using(SqlCommand _cmd = new SqlCommand(queryStatement, _con))
{
SqlDataAdapter _dap = new SqlDataAdapter(_cmd);
_con.Open();
_dap.Fill(Table);
_con.Close();
}
Console.WriteLine(Table.Rows.Count);
foreach (DataRow dataRow in Table.Rows)
{
foreach (var item in dataRow.ItemArray)
{
Console.WriteLine(item);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 11
正确的表格显示
static void print_results(DataTable data)
{
Console.WriteLine();
Dictionary<string, int> colWidths = new Dictionary<string, int>();
foreach (DataColumn col in data.Columns)
{
Console.Write(col.ColumnName);
var maxLabelSize = data.Rows.OfType<DataRow>()
.Select(m => (m.Field<object>(col.ColumnName)?.ToString() ?? "").Length)
.OrderByDescending(m => m).FirstOrDefault();
colWidths.Add(col.ColumnName, maxLabelSize);
for (int i = 0; i < maxLabelSize - col.ColumnName.Length + 10; i++) Console.Write(" ");
}
Console.WriteLine();
foreach (DataRow dataRow in data.Rows)
{
for (int j = 0; j < dataRow.ItemArray.Length; j++)
{
Console.Write(dataRow.ItemArray[j]);
for (int i = 0; i < colWidths[data.Columns[j].ColumnName] - dataRow.ItemArray[j].ToString().Length + 10; i++) Console.Write(" ");
}
Console.WriteLine();
}
}
Run Code Online (Sandbox Code Playgroud)
这是将表转储为逗号分隔字符串的另一种解决方案:
using System.Data;
public static string DumpDataTable(DataTable table)
{
string data = string.Empty;
StringBuilder sb = new StringBuilder();
if (null != table && null != table.Rows)
{
foreach (DataRow dataRow in table.Rows)
{
foreach (var item in dataRow.ItemArray)
{
sb.Append(item);
sb.Append(',');
}
sb.AppendLine();
}
data = sb.ToString();
}
return data;
}
Run Code Online (Sandbox Code Playgroud)
使用以下扩展方法 (C# 9.0):
/// <summary>
/// Provides extension methods for the <see cref="DataTable"/> type.
/// </summary>
public static class DataTableExtensions
{
/// <summary>
/// Generates a textual representation of the data of <paramref name="table"/>.
/// </summary>
/// <param name="table">The table to print.</param>
/// <returns>A textual representation of the data of <paramref name="table"/>.</returns>
public static String Print(this DataTable table)
{
String GetCellValueAsString(DataRow row, DataColumn column)
{
var cellValue = row[column];
var cellValueAsString = cellValue is null or DBNull ? "{{null}}" : cellValue.ToString();
return cellValueAsString;
}
var columnWidths = new Dictionary<DataColumn, Int32>();
foreach (DataColumn column in table.Columns)
{
columnWidths.Add(column, column.ColumnName.Length);
}
foreach (DataRow row in table.Rows)
{
foreach (DataColumn column in table.Columns)
{
columnWidths[column] = Math.Max(columnWidths[column], GetCellValueAsString(row, column).Length);
}
}
var resultBuilder = new StringBuilder();
resultBuilder.Append("| ");
foreach (DataColumn column in table.Columns)
{
resultBuilder.Append(column.ColumnName.PadRight(columnWidths[column]));
resultBuilder.Append(" | ");
}
resultBuilder.AppendLine();
foreach (DataRow row in table.Rows)
{
resultBuilder.Append("| ");
foreach (DataColumn column in table.Columns)
{
resultBuilder.Append(GetCellValueAsString(row, column).PadRight(columnWidths[column]));
resultBuilder.Append(" | ");
}
resultBuilder.AppendLine();
}
return resultBuilder.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
foreach (DataRow dr in myDataTable.Rows)
{
foreach (var item in dr.ItemArray)
{
Console.Write(item + " ");
}
Console.WriteLine();
}
Run Code Online (Sandbox Code Playgroud)
1之前的答案与此类似,但没有清晰地格式化行条目和单元格之间的分隔