[ Valerij Zajcev @ 27.07.2008. 16:49 ] @
Code:

DataSet dsSearch = m_objSearchSms.SearchSmsMessage(Program.IDKorisnika, dtpKeyDate.Value);

            foreach (DataRowView rowVW in dsSearch.Tables[0].DefaultView)
            {
                string smsText = rowVW.Row[0].ToString();
                string date = rowVW.Row[1].ToString();
                string line = "-----------------------------------------------------------------------------------------------";
                long deleteId = (long)rowVW.Row[3];
                smsNumber += 1;
                string sms = string.Format("\nSMS No: {0}, on date: {1}, ECode: ({4})\n{2}\n{3}\n{2}",
                    smsNumber, date, line, smsText, deleteId);
                this.txtOldSms.Text += sms;
            }
            smsNumber = 0;


Imam stored proceduru koja preko ovog ID-a i datuma pronadje sve poruke i u MS SQL to lepo radi, ali iz VS sve lepo radi do foreach petlje, gde u stvari ne uradi nista nego preskoci celu petlju, ne znam zasto to radi, kada samo treba da ispise podatke iz preuzete tabele?!
[ Valerij Zajcev @ 01.08.2008. 11:29 ] @
Nije sa dataSet-om nego sa upitom :)
Code:

ALTER PROC [dbo].[SearchSMS]
@id bigint,
@date datetime

AS
SELECT SMSTEXT, DATUM, SMSNUMBER, SMSID
FROM dbo.SMSMessages
WHERE USERID = @id AND DATUM = @date


unos >> 2, 8/1/2008
...ali ne daje mi nikakav izlaz!

Ako obrisem datum vraca sve normalno ali kada dodam datum nece??? (MS SQL 05)
[ deerbeer @ 01.08.2008. 12:07 ] @
Obrati paznju na rezoluciju datuma u polju datetime jer datum je upisan zajedno sa vremenom
tako da kad poredis 2 datuma SQL uzima u obzir i vreme pri cemu se datum 7/8/2008 interpreira kao 7/8/2008 00:00:00

Code:

SELECT SMSTEXT, DATUM, SMSNUMBER, SMSID
FROM dbo.SMSMessages
WHERE USERID = @id AND 
(MONTH(DATUM) = MONTH(@date) AND YEAR(@date) = YEAR(DATUM)  AND DAY(DATUM) = DAY(@day) )

ako hoces da dobijes sve recorde iz baze za taj dan
[ Valerij Zajcev @ 01.08.2008. 12:51 ] @
E, hvala puno :) sada radi super!
[ mmix @ 03.08.2008. 09:26 ] @
Postoji jedan "trik" kojim ovo moze da se optimizuje da radi mnogo brze (posto ovde radis tri komplikovane numericke operacije nad svakim redom u tabeli).

Fora je u tome sto je interno datetime predstavljen kao float kome je decimalni deo vreme, dakle cast pa floor zaokruzuje datum na 00:00:00 i moze direktno da se poredi i to radi veoma brzo jer se za svaki red radi samo jedna FP operacija (floor)


Code:

ALTER PROC [dbo].[SearchSMS]
(@id bigint,
@date datetime)
AS
begin
   declare @mojdatum float;
   set @mojdatum = floor(cast(@date as float));

   SELECT SMSTEXT, DATUM, SMSNUMBER, SMSID
   FROM dbo.SMSMessages
   WHERE USERID = @id AND floor(cast(DATUM as float)) = @mojdatum;
end