如何更改 SQL 中的值

Posted

技术标签:

【中文标题】如何更改 SQL 中的值【英文标题】:How to change value in the SQL 【发布时间】:2017-02-08 13:02:37 【问题描述】:

我在 SQL-Server2008 中使用存储过程。 C#中实现的代码如下:

SqlConnection con = new SqlConnection("...");

DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand("sp_point", con);
da.SelectCommand = cmd;
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
da.Fill(dt);
dataGridView1.DataSource = dt;

我的数据库中的日期时间格式基于日期、小时、分钟、秒和毫秒。 列也显示毫秒。 如果我想显示毫秒,我应该如何修改代码?

编辑:

我的存储过程:

    USE [Diagnose]
GO
/****** Object:  StoredProcedure [dbo].[sp_point]    Script Date: 02/09/2017 14:04:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[sp_point]

as
SELECT     dbo.Station.StationName, dbo.SPointState.SPointStateName, dbo.Point.PointName, dbo.PointState.PointStateName, dbo.PositionPoint.PositionPointName, 
                      dbo.RouteType.RouteTypeName, dbo.PartOfRoute.PartOfRoute AS PartOfRoute, dbo.PointPacket.PointPacketID AS PointPacketID, dbo.PointPacket.Operator AS Operator, 
                      dbo.PointPacket.BlockedPoint AS BlockedPoint, dbo.PointPacket.WarningLable AS WarningLable, dbo.PointPacket.EmergencyLock AS EmergencyLock, 
                      dbo.PointPacket.SendPointStateFromIO AS SendPointStateFromIO, dbo.PointPacket.SendPointPositionFromIO AS SendPointPositionFromIO, dbo.PointPacket.HealthSendFromIO AS HealthSendFromIO, 
                      dbo.Date.Date AS Date_Time
FROM         dbo.PointPacket INNER JOIN
                      dbo.SPointState ON dbo.PointPacket.SPointState = dbo.SPointState.SPointStateID INNER JOIN
                      dbo.Station ON dbo.PointPacket.StationCode = dbo.Station.StationID INNER JOIN
                      dbo.Date ON dbo.PointPacket.Date = dbo.Date.DateID INNER JOIN
                      dbo.Point ON dbo.PointPacket.PointCode = dbo.Point.PointID INNER JOIN
                      dbo.PointState ON dbo.PointPacket.PointState = dbo.PointState.PointStateID INNER JOIN
                      dbo.PositionPoint ON dbo.PointPacket.PositionPoint = dbo.PositionPoint.PositionPointID INNER JOIN
                      dbo.RouteType ON dbo.PointPacket.RouteType = dbo.RouteType.ID INNER JOIN
                      dbo.PartOfRoute ON dbo.PointPacket.PartOfRoute = dbo.PartOfRoute.ID

select * from PointPacket

【问题讨论】:

您是否尝试过手动运行sp_point 程序?它返回毫秒吗?如果是,请查看 datagridview 中显示该日期的列的 DefaultCellStyle.Format 属性 - 可能毫秒从列掩码中排除。 您可以在从存储过程转换为 varchar 后返回该列。 注意“sp_”前缀:***.com/questions/20530211/… 我在 datagridview 中看不到 DefaultCellStyle.Format 的毫秒数 【参考方案1】:

您应该更改数据在视图层中的显示方式,而不是数据(SQL 过程)或服务层 (da.Fill(dt);)。

您可以自定义日期时间信息在网格视图列中的显示方式,如here 所示:

// keep all date/time info until seconds, included
gridView.Columns[dateColIndex].DefaultCellStyle.Format = "MM/dd/yyyy HH:mm:ss";

【讨论】:

谢谢,它的工作和毫秒MM/dd/yyyy HH:mm:ss:ff【参考方案2】:

尝试将datetime 列转换为varchar 格式。

【讨论】:

以上是关于如何更改 SQL 中的值的主要内容,如果未能解决你的问题,请参考以下文章

SQL:根据 B 列中的布尔值更改 SELECT 查询以在 A 列上显示不同的值

更改DataTable某列的值。C#

SQL 如何通过 INNER JOIN 更新 -

c# 怎么更改DataTable 中某列的值?

位于其他表中的值之间的计数的 SQL 查询

SQL Server 如何确定序列中的下一个值?