如何使用c#和数据集将DateTime读/写到SQL Server

时间:2011-11-10 17:53:39

标签: c# sql-server datetime dataset

我在SQL Server中有一个表,其中有一个名为sql_DateTime的{​​{1}}类型的列。我还有一个C#结构,映射到该表中的单个记录;在此结构中是名为datetime的成员m_DateTime

我使用DateTime从此表中检索记录后出现问题,然后尝试将DataSet中的sql_DateTime转换为Dataset变量。当我尝试执行类似于处理其他数据类型的方式时,我得到m_DateTime

我希望能够在我的GUI中使用InvalidCastException来显示和设置日期和时间。

附上我的代码供您参考。感谢您提供任何指导。

DateTimePicker

4 个答案:

答案 0 :(得分:0)

你说:

  

我在SQL Server中有一个表,其中有一个名为sql_DateTime

的列

然而你使用:

exp.m_DateTime = (DateTime)dsExperiments.Tables["Experiment"]
                                        .Rows[0]["DateTime"];

注意名称。我很惊讶你遇到了铸造问题。是否有可能实际上你的名字是正确的,但你的行不包含值,所以你试图将DBNull.Value投射到DateTime

另外,我会说:

  • 无需通过引用传递exp
  • 我个人将异常处理与数据库访问分开;我让UI处理异常
  • 我使用命名参数,而不是将实验ID直接包含在SQL

答案 1 :(得分:0)

您使用的是数据绑定吗?如果是这样,你是否绑定了适当的财产? SQL是一个可以为空的类型吗?

答案 2 :(得分:0)

试试这个:

        exp.m_DateTime =  DateTime.Parse(dsExperiments.Tables["Experiment"].Rows[0]["DateTime"].ToString());

答案 3 :(得分:0)

问题可能是包含数据(Tables["Experiment"])的DataTable认为列["DateTime"]的类型不是DateTime而是字符串。

我认为你有其他选择:

  1. 如果您确定它始终是DateTime,只需解析它:

    exp.m_DateTime =DateTime.Parse(dsExperiments.Tables["Experiment"].Rows[0]["DateTime"].ToString());
    
  2. 在尝试阅读之前设置dsExperiments.Tables["Experiment"].Columns["DateTime"].DataType=typeof(DateTime);