【问题标题】:cannot convert value of parameter date from system string to system datetime无法将参数日期的值从系统字符串转换为系统日期时间
【发布时间】:2014-04-17 21:17:15
【问题描述】:
public Kupac(SqlDataReader reader)
{
    KupacId = Convert.ToInt32(reader["KupacId"]);
    Ime = reader["Ime"].ToString();
    Prezime = reader["Prezime"].ToString();
    IdentifikacioniBroj = reader["IdentifikacioniBroj"].ToString();
    ClanOd = (DateTime)reader["ClanOd"];
    KorisnickoIme = reader["KorisnickoIme"].ToString();
}

public int KupacId
{
    get;
    set;
}

public string Ime
{
    get;
    set;
}

public string Prezime
{
    get;
    set;
}

public string IdentifikacioniBroj
{
    get;
    set;
}

public DateTime ClanOd
{
    get;
    set;
}

public string KorisnickoIme
{
    get;
    set;
}

【问题讨论】:

  • 那么@ClanOd 参数的值是多少?
  • 如果您发布一些代码 -(C# 和 SQL)可能有助于加快回答速度。
  • 日期...我的表 ClanOd 是 smalldatetime
  • 发布产生此错误的代码。否则我们将无法提供帮助。而且您也可能会丢失大部分堆栈跟踪。
  • -1 无代码,错误不够

标签: c# asp.net sql


【解决方案1】:

您不能将字符串转换为日期时间,但可以使用 DateTime 的 Parse:

ClanOd = DateTime.Parse(reader["ClanOd"]);

【讨论】:

  • 很可能是因为 ClanOd 参数的值不是有效的 DateTime 字符串。 @user3444160 的答案在这种情况下有效。如果它是一个有效的字符串,您可能必须指定文化。您可以在尝试转换为 DateTime 时发布 ClanOd 的值吗?
  • 我在网格和详细信息视图中使用 DataFormatString {0:dd.MM.yyyy} 但不起作用,我不知道这是我的错误
  • @user3332776 不要不要说“这行不通”。告诉我们为什么它不起作用。如果有异常,请先弄清楚异常的含义,然后再说它不起作用。如果您仍然无法弄清楚,那么您可以告诉我们。
【解决方案2】:

您可能需要指定文化

ClanOd = DateTime.ParseExact(reader["ClanOd"], "dd.MM.yyyy", System.Globalization.CultureInfo.GetCultureInfo("de-DE"));

或者试试这个:

System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("de-DE");
ClanOd = DateTime.Parse(reader["ClanOd"], cultureInfo);

【讨论】:

  • 不,我认为这不适合我,我认为这是一些愚蠢的错误
  • 替换你的 ClanOd = (DateTime)reader["ClanOd"];使用我提供的代码
【解决方案3】:

Smith.h.Neil 所说的,但如果值可能是无效日期,我会使用其他版本的 try parse。

 string validDate = "2014-04-17";
 string invalidDate = "not a date";
 DateTime date;
 DateTime date2;
 bool isValidDate = DateTime.TryParse(validDate, out date);
 bool isValidDate2 = DateTime.TryParse(invalidDate , out date2);

http://msdn.microsoft.com/en-us/library/system.datetime.aspx

假设 ClanOd 是 DateTime 替换

ClanOd = (DateTime)reader["ClanOd"];

DateTime date;
bool isValid = DateTime.TryParse(reader["ClanOd"].ToString(), out date);
if(isValid)
    ClanOd  = date;

【讨论】:

  • OP 说我的答案没有用,所以我猜你的答案会解决问题。
  • 我必须更新DetailsView控件插入工作,删除工作但更新不起作用
  • 错误 2 'System.DateTime.Parse(string, System.IFormatProvider)' 的最佳重载方法匹配有一些无效参数
  • 废话!用 TryParse 替换 Parse
  • 如果我正确读取异常,ClodOd 是字符串而不是日期时间。如果是这种情况,那么您不需要将值转换或解析为日期时间。试试“ClanOd = reader[”ClanOd”].ToString();”如果这不能消除错误,那么您将错误的代码视为异常的来源。
【解决方案4】:

这些都来自我的 KupacAdapter 类,我的错误就在这里

公共类 KupacAdapter {

public KupacAdapter()
{

}

public static List<Kupac> VratiKupce(int kriterijumPretrage, string tekstPretrage)
{
    List<Kupac> listaKupaca = new List<Kupac>();

    SqlConnection konekcija = new SqlConnection();

    try
    {
        konekcija.ConnectionString = CONNECTION_STRING;
        konekcija.Open();

        SqlCommand komanda = new SqlCommand();
        komanda.Connection = konekcija;

        string selectUpit = "select * from Kupac where 1=1 ";

        if (!string.IsNullOrEmpty(tekstPretrage))
        {
            switch (kriterijumPretrage)
            {
                case 0:
                    selectUpit += " and IdentifikacioniBroj LIKE '%' + @kriterijum + '%'";
                    break;
                case 1:
                    selectUpit += " and Ime LIKE '%' + @kriterijum + '%'";
                    break;
                case 2:
                    selectUpit += " and Prezime LIKE '%' + @kriterijum + '%'";
                    break;
            }

            komanda.Parameters.AddWithValue("@kriterijum", tekstPretrage);
        }
        komanda.CommandText = selectUpit;


        SqlDataReader reader = komanda.ExecuteReader();

        while (reader.Read())
        {
            listaKupaca.Add(new Kupac(reader));
        }
        reader.Close();

        return listaKupaca;
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        konekcija.Close();
    }
}

public static void InsertKupac(Kupac kupac)
{
    SqlConnection konekcija = new SqlConnection();
    try
    {
        konekcija.ConnectionString = CONNECTION_STRING;
        konekcija.Open();

        string insertUpit = "INSERT INTO Kupac(Ime, Prezime, IdentifikacioniBroj, ClanOd, KorisnickoIme) "
                            + "VALUES(@Ime, @Prezime, @IdentifikacioniBroj, GETDATE(), @KorisnickoIme)";

        SqlCommand komanda = new SqlCommand(insertUpit, konekcija);
        komanda.Parameters.AddWithValue("@Ime", kupac.Ime);
        komanda.Parameters.AddWithValue("@Prezime", kupac.Prezime);
        komanda.Parameters.AddWithValue("@IdentifikacioniBroj", kupac.IdentifikacioniBroj);
        komanda.Parameters.AddWithValue("@KorisnickoIme", kupac.KorisnickoIme);

        komanda.ExecuteNonQuery();
    }
    catch
    {

    }
    finally
    {
        konekcija.Close();
    }
}

public static void UpdateKupac(Kupac kupac)
{
    SqlConnection konekcija = new SqlConnection();
    try
    {
        konekcija.ConnectionString = CONNECTION_STRING;
        konekcija.Open();

        string updateUpit = @" UPDATE [Kupac] 
                               SET [Ime] = @Ime, [Prezime] = @Prezime, 
                    [IdentifikacioniBroj] = @IdentifikacioniBroj
                               WHERE [KupacId] = @KupacId";

        SqlCommand komanda = new SqlCommand(updateUpit, konekcija);
        komanda.Parameters.Add("@Ime", kupac.Ime);
        komanda.Parameters.Add("@Prezime", kupac.Prezime);
        komanda.Parameters.Add("@IdentifikacioniBroj", kupac.IdentifikacioniBroj);
        komanda.Parameters.Add("@KupacId", kupac.KupacId);

        komanda.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        konekcija.Close();
    }
}

public static void DeleteKupac(Kupac kupac)
{
    SqlConnection konekcija = new SqlConnection();
    try
    {
        konekcija.ConnectionString = CONNECTION_STRING;
        konekcija.Open();

        string deleteUpit = @" DELETE 
                               FROM Kupac
                               WHERE KupacId = @KupacId";

        SqlCommand komanda = new SqlCommand(deleteUpit, konekcija);
        komanda.Parameters.Add("@KupacId", kupac.KupacId);

        komanda.ExecuteNonQuery();
    }
    catch
    {

    }
    finally
    {
        konekcija.Close();
    }
}

public static DataTable VratiSveKupce()
{
    DataTable dtSviKupci = new DataTable();

    SqlConnection konekcija = new SqlConnection();

    try
    {
        konekcija.ConnectionString = CONNECTION_STRING;
        konekcija.Open();

        string selectUpit = @"SELECT        KupacId, Ime, Prezime, IdentifikacioniBroj, ClanOd,
                            Ime + ' ' + Prezime + ' - ' + IdentifikacioniBroj AS PunoIme

                            FROM            Kupac
                            Order by Ime, Prezime, IdentifikacioniBroj";

        SqlDataAdapter da = new SqlDataAdapter(selectUpit, konekcija);
        da.Fill(dtSviKupci);
    }
    catch
    {
        dtSviKupci = null;
    }
    finally
    {
        konekcija.Close();
    }
    return dtSviKupci;
}

public static int VratiKupacIdZaKorisnickoIme(string korisnickoIme)
{
    SqlConnection konekcija = new SqlConnection();

    try
    {
        konekcija.ConnectionString = CONNECTION_STRING;
        konekcija.Open();

        SqlCommand komanda = new SqlCommand();
        komanda.Connection = konekcija;

        string selectUpit = "select * from Kupac where KorisnickoIme=@KorisnickoIme";
        komanda.Parameters.AddWithValue("@KorisnickoIme", korisnickoIme);
        komanda.CommandText = selectUpit;

        return Convert.ToInt32(komanda.ExecuteScalar());
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        konekcija.Close();
    }
}

}

【讨论】:

    【解决方案5】:

    public Kupac(SqlDataReader 阅读器) { 尝试 { KupacId = Convert.ToInt32(reader["KupacId"]); Ime = reader["Ime"].ToString(); Prezime = reader["Prezime"].ToString(); IdentifikacioniBroj = reader["IdentifikacioniBroj"].ToString(); ClanOd = (DateTime)reader["ClanOd"]; KorisnickoIme = 读者["KorisnickoIme"].ToString(); } 捕捉(异常错误) { 抛出错误; } }

    //public Kupac(SqlDataReader reader)
    //{
    //    KupacId = Convert.ToInt32(reader["KupacId"]);
    //    Ime = reader["Ime"].ToString();
    //    Prezime = reader["Prezime"].ToString();
    //    IdentifikacioniBroj = reader["IdentifikacioniBroj"].ToString();
    //    ClanOd = (DateTime) reader["ClanOd"];        
    //    KorisnickoIme = reader["KorisnickoIme"].ToString();
    //}
    
    public int KupacId
    {
        get;
        set;
    }
    
    public string Ime
    {
        get;
        set;
    }
    
    public string Prezime
    {
        get;
        set;
    }
    
    public string IdentifikacioniBroj
    {
        get;
        set;
    }
    
    public DateTime ClanOd
    {
        get;
        set;
    }
    
    public string KorisnickoIme
    {
        get;
        set;
    
    }
    

    }

    【讨论】:

    • 如果不是答案,请停止发布随机代码作为答案。如果是答案,请提供解释。请删除您的答案并更新您的问题以适当地解释您的情况。
    猜你喜欢
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    相关资源
    最近更新 更多