Soru DataReader'ı kullanarak bir tarih okuma


Bir veri okuyucusu ile bu formatı kullanarak bir dize okudum. Benzer formatı kullanarak bir tarihte nasıl okuyabilirim?

while (MyReader.Read())
{
    TextBox1.Text = (string)MyReader["Note"];
}

25
2018-04-11 09:22


Menşei


SQL nedir veri tipi sütununun - abatishchev


Cevaplar:


Aşağıda verileni deneyin:

while (MyReader.Read())
{
    TextBox1.Text = Convert.ToDateTime(MyReader["DateField"]).ToString("dd/MM/yyyy");
}

içinde ToString() Yöntemi ihtiyacınıza göre veri formatını değiştirebilirsiniz.


32
2018-04-11 09:27



ConvertTo'da hata oluştu. Mevcut bağlamda mevcut değil. - TeaDrinkingGeek
plz şimdi güncellenen soruya bakın. - Sukhjeevan
İşe yarıyor. Teşekkürler. - TeaDrinkingGeek


Sorgunun sütununun uygun bir türü varsa

var dateString = MyReader.GetDateTime(MyReader.GetOrdinal("column")).ToString(myDateFormat)

Sorgunun sütunu aslında bir dizgeyse, diğer yanıtları inceleyin.


11
2018-04-11 09:46



GetDateTime yalnızca bir tamsayı kabul eder: msdn.microsoft.com/en-us/library/... - sikander
@sikander Sadece kullanmayı unuttuğum için tutarlı olduğumu iddia edebilirim GetOrdinal. - Richard
MS'nin aptalca sütun ismine izin vermez. Cevabınızı güncellemek için alkışlar. - sikander


Bu biraz konu dışı görünebilir, ancak bu c # içinde bir dateTime olarak bir sütun okurken ne olduğunu merak ederken karşılaştığım yazı idi. Gönderi, bu mekanizma hakkında bulabilmek için sevdiğim bilgileri yansıtıyor. Utc ve saat dilimleri hakkında endişeleniyorsanız okumaya devam edin

Hangi zaman dilimini kullandığınıza dair otomatik varsayımlarından dolayı ve yerel zamanları ve utc zamanlarını karıştırmanın çok kolay olmasından dolayı, bir ders olarak DateTime'a her zaman çok tedbirli olduğumdan biraz daha fazla araştırma yaptım.

Burada kaçınmaya çalıştığım şey DateTime oluyor. 'oh üzerinde çalışıyorum bilgisayar x timezone bak, bu yüzden bu kez de zaman dilimi x olması gerekir, zaman değerleri için sorulduğunda ben o saat diliminde sanki ben cevap vereceğim'

Bir okumaya çalışıyordum datetime2 sütunu.

Sql sunucusundan geri döneceğiniz tarih, Kind.Unspecified Bu, istediğim şey UTC gibi muamele edildiği anlamına geliyor.

Bir okurken date sütun olarak da okumak zorundasınız DateTime zamana sahip olmamasına ve hatta saat dilimlerinde (gece yarısı olduğu gibi) zıplamaya daha eğilimli olmasına rağmen.

Ben kesinlikle bu ya da sql sunucu ya da c # statik ayarlarında ayarları tarafından değiştirilmiş olabileceğinden şüpheleniyorum gibi DateTime okumak daha güvenli bir yol olarak düşünürdüm:

var time = reader.GetDateTime(1);
var utcTime = new DateTime(time.Ticks, DateTimeKind.Utc);

Oradan bileşenleri (Gün, Ay, Yıl) vb. Alabilir ve nasıl istediğinizi biçimlendirebilirsiniz.

Eğer sahip olduğunuz şey aslında bir tarih + bir zamandır, o zaman Utc orada ne istediğinizi olmayabilir - çünkü istemcinin etrafında dolaşıyor olmanızdan önce onu yerel bir zamana dönüştürmeniz gerekebilir (zamanın anlamına bağlı olarak) ). Ancak bu bir sürü solucan açar. Eğer bunu yapmanız gerekiyorsa, noda zamanı. Var TimeZoneInfo Standart kütüphanede fakat kısa bir süre sonra araştırdıktan sonra uygun saat dilimleri. Tarafından verilen listeyi görebilirsiniz. TimeZoneInfo yöntemi kullanarak TimeZoneInfo.GetSystemTimeZones();

Ayrıca, SQL Server yönetim stüdyosunun onları görüntülemeden önce yerel zamana dönüştürmediğini de keşfettim. Hangi bir rahatlama!


7
2018-04-21 13:55



Bunu kısaltabilirsin DateTime.SpecifyKind(reader.GetDateTime(1), DateTimeKind.Utc) bu yüzden elle keneler juggle yapmak zorunda değilsiniz :) - jocull


 (DateTime)MyReader["ColumnName"];

VEYA

Convert.ToDateTime(MyReader["ColumnName"]);

5
2018-04-11 09:27



(DateTime) MyReader [ "tarihi"]; hata veriyor - TeaDrinkingGeek
BU BİR Convert.ToDateTime (MyReader ["ColumnName"]); ? - Muhammad Akhtar
Her iki doğru ifade döndürür DateTime. bu arada sol ifade kabul eder String. Yani araman gerek ToString() neyse. - abatishchev
@abatishchev; Bu açık, ben sadece ona DateTime dönüştürmek için bir çözüm verdik. O kısmı görmezden geliyorum çünkü varsayım ki, bu şeyi bilmeli - Muhammad Akhtar
Sağ. Daha sonra kodun tamamlanmasını sağlamak için sadece sol bölümü silin. - abatishchev


        /// <summary>
    /// Returns a new conContractorEntity instance filled with the DataReader's current record data
    /// </summary>
    protected virtual conContractorEntity GetContractorFromReader(IDataReader reader)
    {
        return new conContractorEntity()
        {
            ConId = reader["conId"].ToString().Length > 0 ? int.Parse(reader["conId"].ToString()) : 0,
            ConEmail = reader["conEmail"].ToString(),
            ConCopyAdr = reader["conCopyAdr"].ToString().Length > 0 ? bool.Parse(reader["conCopyAdr"].ToString()) : true,
            ConCreateTime = reader["conCreateTime"].ToString().Length > 0 ? DateTime.Parse(reader["conCreateTime"].ToString()) : DateTime.MinValue
        };
    }

VEYA

        /// <summary>
    /// Returns a new conContractorEntity instance filled with the DataReader's current record data
    /// </summary>
    protected virtual conContractorEntity GetContractorFromReader(IDataReader reader)
    {
        return new conContractorEntity()
        {
            ConId = GetValue<int>(reader["conId"]),
            ConEmail = reader["conEmail"].ToString(),
            ConCopyAdr = GetValue<bool>(reader["conCopyAdr"], true),
            ConCreateTime = GetValue<DateTime>(reader["conCreateTime"])
        };
    }

// Base methods
        protected T GetValue<T>(object obj)
    {
        if (typeof(DBNull) != obj.GetType())
        {
            return (T)Convert.ChangeType(obj, typeof(T));
        }
        return default(T);
    }

    protected T GetValue<T>(object obj, object defaultValue)
    {
        if (typeof(DBNull) != obj.GetType())
        {
            return (T)Convert.ChangeType(obj, typeof(T));
        }
        return (T)defaultValue;
    }

0
2018-01-25 08:32





Benim durumumda, SQL veritabanındaki datetime alanını boş değere izin vermek için değiştirdim. SqlDataReader, değeri doğrudan bir DateTime'a dönüştürmeme izin verdi.


0
2018-04-21 22:16





Bunun eski bir soru olduğunu biliyorum, ama hiçbir cevaptan söz etmediğime şaşırdım GetDateTime:

Belirtilen sütunun değerini bir DateTime nesne.

Hangi şekilde kullanabilirsiniz:

while (MyReader.Read())
{
    TextBox1.Text = MyReader.GetDateTime(columnPosition).ToString("dd/MM/yyyy");
}

0
2018-05-02 00:58