zamiana timestamp na stringa

Odpowiedz Nowy wątek
2008-09-10 19:50
0

Witam,
próbuje pobrać z bazy i wyświetlić na listboxie pole które jest timestampem. Mam taki kod:

IDbConnection dbcon;
                dbcon = new NpgsqlConnection(BazaZmiennych.GetSettings().connectionString);
                dbcon.Open();
                IDbCommand dbcmd = dbcon.CreateCommand();
                string sql = "Select idcudaka, czas, status, id, command, odpowiedz FROM server_commands";
                dbcmd.CommandText = sql;
                IDataReader reader = dbcmd.ExecuteReader();
                listView1.View = View.Details;
                ListViewItem lSingleItem;
                listView1.Items.Clear();
                while (reader.Read())
                {
                    lSingleItem = listView1.Items.Add(reader["id"].ToString());
                    int idcudaka = (int)reader["idcudaka"];
                    lSingleItem.SubItems.Add(idcudaka.ToString());
                    int data = (int)reader["czas"];  
                    lSingleItem.SubItems.Add(data.ToString());
                    lSingleItem.SubItems.Add((string)reader["status"]);
                    lSingleItem.SubItems.Add((string)reader["command"]);
                    lSingleItem.SubItems.Add((string)reader["odpowiedz"]);
                }
                reader.Close();
                reader = null;
                dbcmd.Dispose();
                dbcmd = null;
                dbcon.Close();
                dbcon = null;

Zamiana którą mam : int data = (int)reader["czas"];
zwraca błąd: Określone rzutowanie jest nieprawidłowe.

Wiecie może jak zrobić z tego stringa??

Z góry dzięki za pomoc,
pozdrawiam Northwest

Pozostało 580 znaków

2008-09-10 20:25
0

pole typu timestamp jest traktowane w bazie jako Varbinary(8) wiec to co pobierasz to byte[] i teraz juz sobie zamien na stringa: Convert.ToBase64String(byte[])

pozdrawiam

Pozostało 580 znaków

2008-09-10 20:29
0

string data = Convert.ToBase64String(reader["czas"]); - czyli coś takiego??

Pozostało 580 znaków

2008-09-10 22:16
0
Northwest napisał(a)

string data = Convert.ToBase64String(reader["czas"]); - czyli coś takiego??

reader["cos"] - to typ object wiec musisz go jeszcze na byte[] zamienic i potem wrzucic do metody ToBase64String, czyli uzywajac ponizszej metody zrob tak:

Convert.ToBase64String(ObjectToByteArray(reader["czas"]));
   private byte[] ObjectToByteArray(Object obj)
    {
        if(obj == null)
            return null;
        BinaryFormatter bf = new BinaryFormatter();
        MemoryStream ms = new MemoryStream();
      bf.Serialize(ms, obj);
      return ms.ToArray();
   }

P.S pisze z pamieci, ale powino byc ok;p

pozdrawiam

Pozostało 580 znaków

2008-09-10 22:30
0

coś nie do końca wyszło :(

string data = Convert.ToBase64String(ObjectToByteArray(reader["czas"]));
lSingleItem.SubItems.Add(data);

i w polu czas (data) mam jakieś literki,cyferki itp zamiast daty...:(

Pozostało 580 znaków

2008-09-10 23:58
0

string data = Convert.ToBase64String(ObjectToByteArray(reader["czas"]));

jest na pewno zle. Kodowanie Base64 zamienia cos binarnego na na Litery, cyfry, + i / czyli na takie znaki co mozna przeslac np przez URL albo Mail'em. na koncu ciagu moze sie pojawic == znak wypelniajacy. Base64 nie ma nic wspolnego z Timestamp

Pozostało 580 znaków

2008-09-11 00:00
0

dokładnie, zrobił mi się dziwny ciąg znaków... wiesz może jak to naprawić??

Pozostało 580 znaków

2008-09-11 00:12
0

System.Text.Encoding.UTF8.GetString(); masz rowniez inne klasy niz utf8.

Northwest napisał(a)

coś nie do końca wyszło :(
i w polu czas (data) mam jakieś literki,cyferki itp zamiast daty...:(

Wlasnie to przeczytalem myslalem ze chcesz sobie przekonwertowac timespan na stringa ale ty chcesz wyciagnac z niego date?????

Dane w kolumnie typu TimeSpan sa generowane automatycznie podczas wstawiania i edycji danych, to pole zawiera jakies tam dane binarne identyfikujace wiersz, ale nie zawiera informacji o dacie!!!!

pozdr.

Pozostało 580 znaków

2008-09-11 00:14
0

mam postgresql i chcę wyciągnąć coś takiego: 2008-09-10 21:12:00 - zwykłą date...

Pozostało 580 znaków

2008-09-11 00:20
0

Przeczytaj powyzej z edytowana przezemnie wypowiedz i zrozumiesz;p

pozdrawiam

Pozostało 580 znaków

2008-09-11 00:23
0

Tak na szybko, jesli "czas" czast to timestamp to nie mozesz tego zapisac tak i zobaczyc co sie stanie? :
String data = (String)reader["czas"]; (moze sam przeksztalci)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0