zamiana timestamp na stringa

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

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

0

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

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

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...:(

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

0

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

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.

0

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

0

Przeczytaj powyzej z edytowana przeze mnie wypowiedz i zrozumiesz;p

pozdrawiam

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)

0

create table server_commands
(
id serial NOT NULL,
czas timestamp,
status character(10),
command varchar(50),
odpowiedz varchar(80),
PRIMARY KEY (id)
);

mam sobie taką tabelkę...

w kolumnie czas mam wartkości w takiej formie: 2008-10-10 1010

to jest data i godzina i te dane są widoczne w pgadminie poprawnie...

string data = (string)reader;"czas"]; nie działa:(

0

hym troche namieszalem [wstyd]
Pomieszalem twoje timestamp z timespan ehhh za duzo kodu i za malo snu

uzyj zapytania:

SELECT EXTRACT(DAY FROM czas ),EXTRACT(MONTH FROM czas )   FROM server_commands

i sklep sobie Stringa z tych kolumn i bedziesz mial twoja date, <ort>ogulnie </ort>nie uzywalem postgresSql dlatego szukalbym funkcji ktore jakos formatuja timespan na string, String.Format(); - moze to pomoze?

EDIT:
z ciekawosci znalazlem to:
http://www.postgresql.org/docs/8.1/interactive/functions-formatting.html
Chyba juz ci ten link wystarczy;) noi jak uzyjesz tego co tam pisze zwruci ci czystego stringa:)

pozdr.

0

2 zapytanie odpada:(
zrobiłem taką kombinację:
DateTime dt = reader.GetDateTime(1);
lSingleItem.SubItems.Add(dt.ToString());

i działa:)))

ps. żeby określić dzień wcześniejszy niż ten pobrany z bazy (czyli np: 2008-10-10 1201 pobrałem z bazy)
co trzeba zrobić??:) coś w stylu dt= dt - 1 ??

0
 System.DateTime today = System.DateTime.Now;

            System.TimeSpan duration = new TimeSpan(1, 0, 0, 0);

           System.DateTime result = today - duration;

P.S rozwiazania tego poprzedniego nie skomentuje;p

pozdr.

0

oki,dzięki:))))

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