Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从表中获取DateTime字段,并在C上获取年、月和日#_C#_Sql Server_Winforms_Sql Server 2012 - Fatal编程技术网

C# 从表中获取DateTime字段,并在C上获取年、月和日#

C# 从表中获取DateTime字段,并在C上获取年、月和日#,c#,sql-server,winforms,sql-server-2012,C#,Sql Server,Winforms,Sql Server 2012,我有一个SQL Server表,它有一个名为ProductionDate的日期时间字段。此字段的格式为:2015-06-29 00:00:00.000 我有一个C#WinForm应用程序,它使用以下命令选择此日期: string productionDate = String.Empty; var prodDate = pallets.Select(r => r.Production_Date); if (prodDate.Count() == 1) { productionDat

我有一个SQL Server表,它有一个名为
ProductionDate
的日期时间字段。此字段的格式为:
2015-06-29 00:00:00.000

我有一个C#WinForm应用程序,它使用以下命令选择此日期:

string productionDate = String.Empty;
var prodDate = pallets.Select(r => r.Production_Date);
if (prodDate.Count() == 1)
{
    productionDate = prodDate.First().ToString();
}
现在,此表单调用第二个表单,其行为:
EditBOL-bol=新的EditBOL(bol、批次、生产日期)

我想做的是,用
prodDate
值填写第二个表单。
这就是表单的外观:

我试图使用调用函数时获得的
prodDate
参数来填充
字段。
这是被调用的函数:

public EditBOL(string BOL, string Batch, string prodDate)
    {
        InitializeComponent();
        txtBOL.Text = BOL;
        txtBatch.Text = Batch;
        //Code to breakdown prodDAte variable comes here!!
    }
我试过很多不同的方法。我试过了
1. <代码>日期时间.解析(prodDate,“yyyy-mm-dd”,区域性)
2. <代码>DateTime.Now.ToString(“yyyy-MM-dd h:MM-tt”)
3.
DateTime-dateVariable=prodDate??DateTime.MinValue

我尝试这一切的原因是,我不想在函数中的dateProd变量上使用
子字符串,因为日期可以是
1-1-2015
10-10-2015
。格式不是
mm dd yyyy 00:00:00.000
,而是
m-d-yyyy 00:00:00.000

所以,子串看起来很愚蠢。因此,我尝试将字符串转换为datetime变量,并执行
DatetimeVariable.Year
DatetimeVariable.Date
,和
DatetimeVariable.Month


编辑1:缺少几行关于如何从表中选择日期的代码

如果您坚持要分析
prodDate
,请尝试以下操作:

public EditBOL(string BOL, string Batch, string prodDate)
{
        InitializeComponent();
        txtBOL.Text = BOL;
        txtBatch.Text = Batch;
        //Code to breakdown prodDAte variable comes here!!
        string[] tokens = prodDate.Split(' ')[0].Split('-');
        yearTextBox.Text = tokens[0];
        monthTextBox.Text = tokens[1];
        dayTextBox.Text = tokens[2];
}
我更喜欢这种方法:

public EditBOL(string BOL, string Batch, string prodDate)
{
        InitializeComponent();
        txtBOL.Text = BOL;
        txtBatch.Text = Batch;
        //Code to breakdown prodDAte variable comes here!!
        DateTime date = Convert.ToDateTime(prodDate);
        yearTextBox.Text = date.Year.ToString();
        monthTextBox.Text = date.Month.ToString();
        dayTextBox.Text = date.Day.ToString();
}

如果您坚持要分析
prodDate
,请尝试以下操作:

public EditBOL(string BOL, string Batch, string prodDate)
{
        InitializeComponent();
        txtBOL.Text = BOL;
        txtBatch.Text = Batch;
        //Code to breakdown prodDAte variable comes here!!
        string[] tokens = prodDate.Split(' ')[0].Split('-');
        yearTextBox.Text = tokens[0];
        monthTextBox.Text = tokens[1];
        dayTextBox.Text = tokens[2];
}
我更喜欢这种方法:

public EditBOL(string BOL, string Batch, string prodDate)
{
        InitializeComponent();
        txtBOL.Text = BOL;
        txtBatch.Text = Batch;
        //Code to breakdown prodDAte variable comes here!!
        DateTime date = Convert.ToDateTime(prodDate);
        yearTextBox.Text = date.Year.ToString();
        monthTextBox.Text = date.Month.ToString();
        dayTextBox.Text = date.Day.ToString();
}

您只需使用
DateTime.ParseExact()


您只需使用
DateTime.ParseExact()



“此字段的格式为:2015-06-29 00:00:00.000”-您说它是DateTime字段,在这种情况下它没有“格式”-当您获取值时,您应该只获取DateTime,而不是字符串…
var prodDate
获取该日期的此值:
6-29-2015 00:00:00
您正在调用
ToString()
。我建议您停止这样做。为什么要将其分配给字符串变量?为什么希望
EditBOL
构造函数接受字符串而不是
DateTime
参数?您基本上是格式化一个
DateTime
,然后再次解析它。。。更简单的是,首先不要将其作为单个字符串。(然后您可以单独设置日/月/年的格式。)@JonSkeet您是对的。今天在另一个部门,当他们选择了不止一个日期时,我这样做是一个问题。必须按照你建议的方式做。谢谢。“这个字段的格式是:2015-06-29 00:00:00.000”-你说它是一个日期时间字段,在这种情况下它没有“格式”-当你获取值时,你应该只获取一个日期时间,而不是字符串…
var prodDate
获取该日期的值:
6-29-2015 00:00
你正在调用
ToString()
。我建议您停止这样做。为什么要将其分配给字符串变量?为什么希望
EditBOL
构造函数接受字符串而不是
DateTime
参数?您基本上是格式化一个
DateTime
,然后再次解析它。。。更简单的是,首先不要将其作为单个字符串。(然后您可以单独设置日/月/年的格式。)@JonSkeet您是对的。今天在另一个部门,当他们选择了不止一个日期时,我这样做是一个问题。必须按照你建议的方式做。谢谢。它说
索引超出了数组的范围。如果我理解这段代码的作用,我会修复它。您能帮忙吗?我使用您的示例作为输入
2015-06-29 00:00:00.000
,得到了正确的结果。您正在测试哪个输入(
prodDate
)?再次检查问题,我编辑了用于从数据库获取生产日期值的代码。很抱歉,我又测试了一次,这两种方法都可以使用。更好的方法是将值接受为
DateTime
,而不是将其从
DateTime
转换为
string
,然后将
string
解析回
DateTime
。它表示
索引超出了数组的范围。如果我理解这段代码的作用,我会修复它。您能帮忙吗?我使用您的示例作为输入
2015-06-29 00:00:00.000
,得到了正确的结果。您正在测试哪个输入(
prodDate
)?再次检查问题,我编辑了用于从数据库获取生产日期值的代码。我很抱歉。我再次测试了它,它应该可以同时使用这两种方法。更好的方法是将值接受为
DateTime
,而不是将其从
DateTime
转换为
string
,然后将
string
解析回
DateTime
。忘记了,我也试过了。但是,我没有尝试将格式存储在单独的变量中,并在ParseExact中使用它。我现在就要试一试。感谢you@CrazyCucumber,我编辑了
格式
变量,请参见编辑后的答案。忘了提及,我也试过了。但是,我没有尝试将格式存储在单独的变量中,并在ParseExact中使用它。我现在就要试一试。感谢you@CrazyCucumber,我编辑了
格式
变量,请参见编辑的答案。