为什么我不能将字符串转换为DateTime?

时间:2017-07-14 14:17:35

标签: sql asp.net-mvc web-services datetime

我无法转换此字符串,任何人都可以帮助我吗?

[WebMethod]
public void InsertUsuario(string usuario, string senha, string nome, string dtnasc, string fone, string email, int oab, string endereco, string bairro, string cep, int codcidade, string cpf, string cnpj)
{
    using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
    {
        string chav = "asfasdf";
        DateTime d = DateTime.ParseExact(dtnasc, "yyyy'-'MM'-'dd'T'HH':'mm", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);

        SqlCommand command = new SqlCommand("INSERT Into Usuarios (IdUsuario, Usuario, Senha, Nome, Chave, DtNasc, Fone, Email, OAB, Endereco, Bairro, CEP, CodCidade, CPF, CNPJ) VALUES ((Select MAX(idusuario)+1 from Usuarios), '" + usuario + "', '" + senha + "', '" + nome + "', '" + chav + "', '"+d+ "', '" + fone + "', '" + email + "', " + oab + ", '" + endereco + "', '" + bairro + "', '" + cep + "', " + codcidade + ", '" + cpf  + "','"+cnpj+"')");

        //command.Parameters.Add("@dtnasc", SqlDbType.DateTime).Value = DateTime.Now;
        command.Connection.Open();
        command.ExecuteNonQuery();
    }
}

这是出现的错误:

  

System.FormatException:Cadeia decaracteresnãofoireconhecida comoDateTimeválido。
  em System.DateTimeParse.ParseExact(String s,String format,DateTimeFormatInfo dtfi,DateTimeStyles style)
  em OniPresenteAPI.oni.InsertUsuario(String usuario,String senha,String nome,String dtnasc,String fone,String email,Int32 oab,String endereco,String bairro,String cep,Int32 codcidade,String cpf,String cnpj)

1 个答案:

答案 0 :(得分:0)

该问题基于您将" 1991-12-21 00:00" 的日期字符串传递给DateTime.ParseExact()的评论。由于第二个参数format参数不正确,因此线索在异常中爆炸。

您的参数为"yyyy'-'MM'-'dd'T'HH':'mm"。正确的格式应为"yyyy-M-dd hh:mm"。阅读文档here,特别是此区域:

  

在   DateTime.ParseExact(字符串,字符串,的IFormatProvider,DateTimeStyles)   方法解析日期的字符串表示形式,该日期必须位于   格式参数定义的格式。它还要求日期   s中的时间元素和格式指定的顺序。如果是   与format参数的模式不匹配   由style参数定义的变体,该方法抛出一个   出现FormatException。

以下是我的工作示例:

using System;
using  System.Globalization;
public class Program
{
    public static void Main()
    {
        string dateAsAString = "1991-12-21 00:00";
        try
        {   
            DateTime d = DateTime.ParseExact(dateAsAString, "yyyy-M-dd hh:mm", CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal);
            Console.WriteLine("The correct Date is " + d.ToString());
        }
        catch (FormatException)
        {
                Console.WriteLine("{0} is not in the correct format.", dateAsAString);
        }
    }
}

还可以dotnetfiddle使用format字符串。