下面一个返回值为DateTime的函数,运行时总是报错:该字符串未被识别为有效的 DateTime。请大家帮帮忙,多谢了!!
public DateTime CarMoveDate(string vin)
{

SqlCommand cmCarMoveDate=new SqlCommand  ("CarMoveDate",cn);
cmCarMoveDate.CommandType =CommandType.StoredProcedure ; SqlParameter parametervin = new SqlParameter("@vin", SqlDbType.VarChar, 50);
parametervin.Value = vin;
cmCarMoveDate.Parameters.Add(parametervin); SqlParameter parametermovedate = new SqlParameter("@movedate",SqlDbType.DateTime);
parametermovedate.Direction = ParameterDirection.Output;
cmCarMoveDate.Parameters .Add(parametermovedate); cn.Open();
cmCarMoveDate.ExecuteNonQuery();
cn.Close(); return Convert.ToDateTime(parametermovedate.Value.ToString());
}

解决方案 »

  1.   

    CREATE PROCEDURE CarMoveDate
    (
       @vin varchar(50),
       @movedate datetime output
    )AS
       
       SELECT @movedate = movedate FROM Car_Move  WHERE vin = @vin
             if (@@RowCount<1)
                begin ----1
                   set   @movedate = null
                end------1   RETURNGO
      

  2.   

    你的问题主要是空的问题,

    return Convert.ToDateTime(parametermovedate.Value.ToString());
    改成如下
    if( parametermovedate.Value == DBNull.Value )
    {
         //use a default date as return value, for example "1900-1-1"
    }
    else
         return (DateTime)parametermovedate.Value;
      

  3.   

    你可以
    try
    {
    return Convert.ToDateTime(parametermovedate.Value.ToString());
    }
    catch(Exception e)
    {
    ....
    }
      

  4.   

    //判断为空的情况
    if typeof(parametermovedate.Value).GetType() == typeof(System.DBNull)
    {
        //给一个默认值
    }
    else
    {
        //从数据库中取
    }
    当然,最好再加上try...catch