3

我的 sql-server 数据库中有一个date数据类型的列,我将其插入其中1999-12-23。当我在我的数据库中运行选择查询时,日期显示为,1999-12-23但是当我将数据库连接到我的 c#winform 应用程序并检索它显示为的日期时1999-12-23 00:00:00(即显示日期和时间)。

这些是我使用的代码

创建表

CREATE TABLE Users.Personal
(
/*...Other Codes for the table this is the main problem*/
DateofReg date NOT NULL
)

选择查询

SELECT * FROM Users.Personal

(这将日期显示为1999-12-23

连接到数据库

private void RetrievePersonalDetails()
{
    SqlConnection myConnection = new SqlConnection("server=AMESINLOLA;" +
        "Trusted_Connection=yes;" +
        "database=Crm_Db;");
    myConnection.Open();

    SqlCommand myCommand = myConnection.CreateCommand();
    myCommand.CommandText = "SELECT * FROM Users.Personal WHERE UniqueID='" + uniqueid + "'";
    myCommand.CommandType = CommandType.Text;

    SqlDataReader myReader = myCommand.ExecuteReader();

    if (myReader.Read())
    {
        //Other codes inserting to textbox but this is the main problem
        txtDor.Text = myReader["DateofReg"].ToString();
    }
    else
    {
        MessageBox.Show("Empty");
    }
    myConnection.Close();
    myReader.Close();
}

(这将日期显示为1999-12-23 00:00:00

为什么日期在应用程序中随时间显示,但在数据库中显示良好,我该怎么做才能只显示日期?

4

6 回答 6

6

myReader["DateofRef"]似乎返回一个DateTime对象。这在内部存储您的日期值的刻度(包括时间和毫秒等)。

ToString为您的 DateTime 对象应用默认格式。

您也可以使用 DateTime.Now.ToShortDateString()which 将仅打印年、月和日。

格式虽然取决于当前的Thread.CurrentThread.CurrentCulture文化ToStrinIFormatProviderCultureInfo...

您可以通过将格式传递给 ToString 方法来更改格式。

可以在这里找到很多示例http://msdn.microsoft.com/en-US/library/zdtaw1bw(v=vs.110).aspx

于 2013-09-29T21:14:25.423 回答
2

虽然 SQL Server 有一个DATE没有时间的日期类型,但 .NET 在核心基类库中没有类似的东西。因此,它使用 aDateTime将时间设置为午夜。

有很多方法可以从 a 中获取仅包含日期的字符串DateTime,但是由于myReader["DateofReg"]将其装箱DateTime为 a object,因此如果要对其进行任何操作,则需要先对其进行转换。例如,

// Unbox the result by casting
DateTime dt = (DateTime) myReader["DateofReg"];

// Use a string formatter to get what you want
txtDor.Text = dt.ToString("d");

// or if you prefer, use this shortcut method
txtDor.Text = dt.ToShortDateString();

这应该可以正常工作,但是如果出于某种原因您实际上想要一个纯粹的“没有时间的日期”类型,而不仅仅是字符串或DateTime午夜,您可以使用Noda Time库中的LocalDate类型。

于 2013-09-29T21:19:37.853 回答
1

第一个解决方案:

txtDor.Text = myReader["DateofReg"].ToShortDateString();

第二个我不推荐:

txtDor.Text = myReader["DateofReg"].ToString().Substring(0,10);
于 2013-09-29T21:15:07.140 回答
0

这将确保返回的代码符合短日期时间格式的 DateTime 对象。

 txtDor.Text = myReader["DateofReg"].GetDateTime.Date.ToString("d"));

可以在这里找到一个例子

于 2013-09-29T21:20:13.970 回答
0

此代码将以 dd/MMM/yyyy 格式返回日期。例如。2013 年 10 月 9 日的格式为 09/Oct/2013。

txtDor.Text = myReader["DateofReg"].ToString("dd/MMM/yyyy");
于 2013-09-30T05:47:35.353 回答
0

尝试 ToShortDateString 而不是 ToString http://msdn.microsoft.com/en-us/library/system.datetime.toshortdatestring.aspx

于 2013-09-29T21:15:33.810 回答