0

我的数据库中有一个DATETIME列。我需要获取值并将其分为 3 个变量,每个变量都有年、月和日

我正在尝试做

dataadapter.Fill(dataset, "tablename");
string x;  
foreach(DataRow dd in dataset.Tables["tablename"].Rows)
{
    x = dataset.Tables["tablename"].Rows[0]["date1"].ToString();
}

这里 x 包含整个 m/dd/yr 和时间,但是我现在如何拥有 3 个变量,它们可以将月份存储在 a 中,将年份存储在 b 中,将天存储在另一个变量 c 中?

4

7 回答 7

4

这个怎么样。

int year, month, day;
DateTime all;

if(DateTime.TryParse(dataset.Tables["tablename"].Rows[0]["date1"], out all)
{
    year = all.Year;
    month = all.Month;
    day = all.Day;
}
于 2011-07-19T20:29:47.233 回答
2
foreach(DataRow dd in dataset.Tables["tablename"].Rows)
{
    var date = DateTime.Parse(dd["date1"].ToString());
    int day = date.Day;
    int month = date.Month;
    int year = date.Year;
    // Do something with it
}
于 2011-07-19T20:31:11.957 回答
1
DateTime dt = DateTime.Parse(x);
int day = dt.Day;
int month = dt.Month;
int year = dt.Year;
于 2011-07-19T20:28:29.623 回答
0
DateTime x;  
foreach(DataRow dd in dataset.Tables["tablename"].Rows)
{
  x = DateTime.Parse(dataset.Tables["tablename"].Rows[0]["date1"].ToString());
}

然后你不需要保留 3 个单独的变量,你将拥有x一个DateTime,所以你可以调用x.Year, x.Month, x.Date(如果你愿意,你仍然可以将它分配给 3 个不同的变量)

于 2011-07-19T20:28:21.257 回答
0

我想最好的方法是创建一个 SQL 查询,它会为您获取所需的日期组件,然后从该查询中填充数据表,而不是从表本身。

那样的话,你会顺便学习一些 SQL 日期处理函数...... :)

于 2011-07-19T20:29:00.197 回答
0

一些选项:

  1. 您可以在 SQL 中将其分解为它的组成部分:

    select yyyy = year(  t.some_datetime ) , -- integer year
           mm   = month( t.some_datetime ) , -- integer month (1-12)
           dd   = day(   t.some_datetime ) , -- integer day (1-31)
    from dbo.some_table t
    
  2. 您可以再次在 SQL 中将其转换为固定长度的 ISO 8601 字符串(易于解析、正确整理):

    select charDate = convert(char(10),t.some_datetime,126) -- 'yyyy-mm-dd'
    from dbo.some_table t
    

    解析组件是一个简单的子字符串操作。

  3. 正如其他人所指出的:只需选择日期时间值。ADO.Net 将其映射到System.DateTime.

    using System;
    using System.Data;
    using System.Data.SqlClient;
    
    namespace ConsoleApplication4
    {
        class Program
        {
          static void Main( string[] args )
          {
            string myConnectString = GetConnectionString() ; // your connect string here!
            using ( SqlConnection dbConnection = new SqlConnection( myConnectString ) )
            using ( SqlCommand    sql          = dbConnection.CreateCommand() )
            {
              sql.CommandType = CommandType.Text ;
              sql.CommandText = @"
    select t.some_datetime
    from dbo.some_table t
    " ;
              dbConnection.Open() ;
              using ( SqlDataReader reader = sql.ExecuteReader() )
              {
                while ( reader.Read() )
                {
                  DateTime someDateTime = reader.GetDateTime(0) ;
                  process( someDateTime.Year , someDateTime.Month , someDateTime.Day ) ;
                }
              }
              dbConnection.Close() ;
            }
    
            return ;
          }
    
          private static void process( int p , int p_2 , int p_3 )
          {
            throw new NotImplementedException();
          }
    
        }
    }
    
于 2011-07-19T21:13:31.533 回答
0

数据库中字段的数据类型是什么?

如果您的数据库字段是一个字符串,那么您必须解析它,否则您可以将其转换为DateTime

// Parse it (be careful, could throw an exception)
DateTime date = DateTime.Parse(dataset.Tables["tablename"].Rows[0]["date1"].ToString());

// Or cast it:
DateTime date = (DateTime)dataset.Tables["tablename"].Rows[0]["date1"];

// Then pull out the values you wish to use from the date object
int months = date.Month;
int day = date.Day;
int year = date.Year;
于 2011-07-19T20:27:28.420 回答