我的sql-server数据库中有一个date
数据类型的列,我将其插入1999-12-23
。当我在我的数据库中运行select查询时,将日期显示为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
)
为什么日期在应用程序中显示时间但在数据库中显示良好,我该怎么做只显示日期?
答案 0 :(得分:6)
myReader["DateofRef"]
似乎返回DateTime
个对象。这内部存储日期值的刻度(包括时间和毫秒等)。
ToString
为DateTime对象应用默认格式。
你也可以使用
DateTime.Now.ToShortDateString()
只会打印年,月,日。
格式虽然取决于当前的文化(Thread.CurrentThread.CurrentCulture
),ToStrin
也会采用名为IFormatProvider
的参数,这可以设置为您想要指定日期的文化字符串应该使用CultureInfo...
您可以通过将格式传递给ToString方法来更改格式。
可以在http://msdn.microsoft.com/en-US/library/zdtaw1bw(v=vs.110).aspx
找到很多例子答案 1 :(得分:2)
虽然SQL Server的类型DATE
是一个没有时间的日期,但.NET在核心基类库中没有类似的东西。所以它使用DateTime
,时间设置为午夜。
您可以通过多种方式获取仅包含DateTime
日期的字符串,但由于myReader["DateofReg"]
将DateTime
列为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
,你可以使用{{1从Noda Time库中输入。
答案 2 :(得分:1)
第一个解决方案:
txtDor.Text = myReader["DateofReg"].ToShortDateString();
我不推荐的第二个:
txtDor.Text = myReader["DateofReg"].ToString().Substring(0,10);
答案 3 :(得分:0)
尝试使用ToShortDateString而不仅仅是ToString http://msdn.microsoft.com/en-us/library/system.datetime.toshortdatestring.aspx
答案 4 :(得分:0)
这将确保返回的代码符合短日期时格式化的DateTime对象。
txtDor.Text = myReader["DateofReg"].GetDateTime.Date.ToString("d"));
可以找到here
的示例答案 5 :(得分:0)
此代码将以dd / MMM / yyyy格式返回日期。对于前者2013年10月9日将采用2013年10月9日的格式。
txtDor.Text = myReader["DateofReg"].ToString("dd/MMM/yyyy");