问题描述
我在asp.net core(3.1)网站上创建了一个页面。在页面上,用户必须指定数据库连接,然后指定“表名”(指定数据库中存在的任何表)。同一页面上还包含预览按钮。 单击“预览”按钮后,我需要转到数据库并获取前100行,并显示在页面的预览部分。
我们正在使用ado.net来获取数据,并将数据表像
public static DataTable GetTableData(int displayCount,string tableName,string connectionString)
{
using (sqlConnection connection = new sqlConnection(connectionString))
{
sqlCommand command = new sqlCommand();
command.Connection = connection;
command.CommandType = CommandType.Text;
command.CommandText = string.Format("SELECT top(@displayCount)* FROM {0}",tableName);
command.Parameters.AddWithValue("@displayCount",displayCount);
sqlDataAdapter sqlAdapter = new sqlDataAdapter(command);
DataSet ds = new DataSet();
sqlAdapter.Fill(ds);
if (ds.Tables.Count > 0)
{
return ds.Tables[0];
}
}
return null;
}
在模型中,我具有属性“ PreviewDataTable”。 现在在Page上,我正在显示这样的数据。
<table class="table mb-0">
<thead>
<tr>
@foreach (DataColumn col in Model.PreviewDataTable.Columns)
{
<th scope="col">@col.ColumnName</th>
}
</tr>
</thead>
<tbody>
@foreach (DaTarow row in Model.PreviewDataTable.Rows)
{
<tr>
@foreach (DataColumn col in Model.PreviewDataTable.Columns)
{
<td>@row[col.ColumnName]</td>
}
</tr>
}
</tbody>
</table>
问题: 如果我有一个包含2列的表,则其中一个是日期,另一个是DateTime。像下面一样
1
在预览部分,它显示如下。
在“预览”部分,“ c_date”列还显示了时间和日期,尽管它是一个日期。 如何仅在日期字段的情况下显示日期?
其他信息:
在调试(如果我们尝试使用反射)时,我知道对于Date字段(C_Date),DataTable中的数据类型为'DateTime'。请检查下图。
解决方法
更新18/08/2020
从SQL Server Data Type Mappings,我们可以看到Date
的{{1}}将自动转换为SQL
。因此,您需要转换为新格式或以新格式显示。
不使用 ColumnName
即可显示日期
显示值的代码
DateTime
如何仅在日期字段的情况下显示日期?
@ Convert.ToDateTime(row [col.ColumnName])。ToString(“ yyyy / MM / dd”);
测试屏幕截图:
视图中的表格代码:
<td>
@{
DateTime dtDate;
if (DateTime.TryParse(@row[col.ColumnName].ToString(),out dtDate))
{
bool isTimeNull = (dtDate.TimeOfDay == TimeSpan.Zero);
if (isTimeNull)
{
@Convert.ToDateTime(row[col.ColumnName]).ToString("yyyy/MM/dd");
}
else
@row[col.ColumnName];
}
else
@row[col.ColumnName];
}
</td>