복붙노트

[SQL] 어떻게 C #을에서 날짜가 제대로 SQL로 전달하는 방법?

SQL

어떻게 C #을에서 날짜가 제대로 SQL로 전달하는 방법?

는 형식으로되어 있습니다에 나는 테이블과 날짜 - 시간을 가지고 :

2011-07-01 15:17:33.357

내가 형식의 날짜 시간을 얻고 개체에) (A로 .toString을 할 때 나는 C #을 날짜 시간을 복용하고 있습니다 :

04/07/2011 06:06:17

나는 (즉, 올바른 날짜 시간을 선택) 내가 제대로 나는 그것이 작동하지 않는 우리의 코드에있는 SQL을 실행하면 때문 통해 올바른 날짜 시간을 통과하는 방법 궁금하네요. 나는 SQL 프로파일 러를 사용할 수 없습니다.

이 코드입니다 :

//looks to if a user has had any activity in within the last time specified
        public bool IsUserActivitySinceSuppliedTime(int userId, DateTime since)
        {
            //get everything since the datetime specified [usually 5 hours as this is 
            //how long the session lasts for
            string sql = "SELECT * FROM tbl_webLogging WHERE userid = @userid AND DateAdded > @sinceDateTime";

            SqlParameter sinceDateTimeParam = new SqlParameter("@sinceDateTime", SqlDbType.DateTime);
            sinceDateTimeParam.Value = since;

            SqlCommand command = new SqlCommand(sql);
            command.Parameters.AddWithValue("@userid", userId);
            command.Parameters.Add(sinceDateTimeParam);


            using (SqlDataReader DataReader = GetDataReader(command))
            {
                if (DataReader.HasRows)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }


        }

최신 정보*******************

나는 데이터에서 다음을 실행 한 :

SELECT * FROM tbl_webLogging 
WHERE userid = 1 
AND DateAdded > '2011-07-01 07:19:58.000'

SELECT * FROM tbl_webLogging 
WHERE userid = 1 
AND DateAdded > '04/07/2011 07:19:58'

하나는 (53 개) 기록을 다른 반환 69 개 레코드를 반환합니다. 어떻게 이럴 수있어? 내가 SQL에 C #을에서 날짜 시간 (2011-04-07 7시 19분 58초)를 통과 할 때 어떤 기록을 전혀 표시하지!

해결법

  1. ==============================

    1.당신은 이미이 작업을 이미해야, 날짜 시간의 값을 가진 날짜 시간 매개 변수를 사용하여 제대로 일을했습니다. 즉 여기에서 사용되지 않기 때문에 - ToString () 잊어 버려요.

    당신은 이미이 작업을 이미해야, 날짜 시간의 값을 가진 날짜 시간 매개 변수를 사용하여 제대로 일을했습니다. 즉 여기에서 사용되지 않기 때문에 - ToString () 잊어 버려요.

    차이가 있다면, 두 환경 사이의 서로 다른 정밀 할 가능성이 높습니다; 아마도 (? 어쩌면 초) 반올림을 선택하고 그것을 사용합니다. 또한 마음 UTC / 지역 / 알 수없는 유지합니다 (DB는 "종류"날짜의 개념이 없습니다; .NET 않습니다).

    데이터베이스에 날짜 시간이 그러한 형식이 아닌 참고; 그것은 당신의 거짓말을 보여주는 당신의 쿼리 클라이언트입니다. 인간은 당신이 표시 한 날짜가 40723.6371916281과 동일 함을 실현하지 않는이 이상한 경향이 있기 때문에, 그것은 숫자로 저장됩니다 (그리고 심지어는 구현 세부 사항입니다). 어리석은 인간. 을 통해 단순히 "날짜"로 처리하여, 당신은 어떤 문제를 얻지한다.

  2. ==============================

    2.나는 C # 및 SQLSERVER 관련된 많은 문제가 있었다. 나는 다음을 수행 결국 :

    나는 C # 및 SQLSERVER 관련된 많은 문제가 있었다. 나는 다음을 수행 결국 :

    또한 반드시 모든 시스템이 동일한 시간대에 실행하는 것이합니다.

    두 번째는 "7 월 4 일"동안 당신이 얻을 다른 결과 집합에 대해서, 첫 번째 예는 "7월 우선"입니다 ...

    또한, 두 번째 예제는 "4 월 7 일"로 해석 될 수있다, 그것은 (내 솔루션이 문제에서 고통을하지 않습니다) 서버 현지화 구성에 따라 달라집니다.

    편집 : 24 시간 시계 시스템에 반대 AM / PM과 시스템에 정확한 시간을 캡처하지 않는 것으로 HH는 HH로 대체되었습니다. 아래의 주석을 참조하십시오.

  3. from https://stackoverflow.com/questions/6570621/how-to-pass-datetime-from-c-sharp-to-sql-correctly by cc-by-sa and MIT license