2014-10-28 2 views
1

시간이있는 테이블의 시간이 time이고 데이터 형식이 Date입니다.DateTime 삽입, 선택 및 업데이트

asp.net에서 나는 날짜를 삽입하는 쿼리를 원하고 다른 날짜는 2 개의 날짜 중에서 선택합니다.

string data = DateTime.Now.ToShortDateString(); //date= 28/10/2014 -> dd/mm/yyyy 
string comando = "INSERT INTO example (date) values '" +data+ "+"'"; 

을 그리고 난이 날짜

select * 
from example 
where date >= '25/10/2014' and date <= '28/10/2014' 

이미 데이터 형식 varchar으로 시도했지만 작동하지 않는 사이에서 선택하는 쿼리를 사용 :

이미 이것을 시도. 그래서 데이터 유형 date으로 시도하고 있습니다. 내가 쿼리 INSERT를 실행하고있을 때

는하지만 문자열에서 날짜 및/또는 시간을 변환 할 때

변환이 실패 오류가 발생합니다.

누군가 나를 도울 수 있습니까? 내가 가진 유일한 문제는 시간을 테이블에 저장하는 것입니다.

나는 날짜의 형식 싶은 가능한 경우 : dd/mm/yyyy

업데이트 :

내가 업데이트의 문제를 날짜 (날짜)와 VARCHAR (이름)이 행을 데 을 그건 내 코드입니다 :

string comando = "UPDATE example set [email protected] WHERE data = @date"; 
SqlCommand cmd = new SqlCommand(comando, connect); 
cmd.Parameters.Add("@name", nome); 
cmd.Parameters.Add("@date", SqlDbType.Date).Value = data; 
cmd.ExecuteNonQuery(); 

messange 오류는 다음과 같습니다. ". 문자열이나 이진 데이터는 잘립니다 문이 종료되었습니다 "

+0

SQL 명령을 매개 변수화하여 marc_s의 조언을 따라야합니다. 내가 틀릴 수도 있지만 귀하의 SQL은 유효하지 않게 보입니다. 값 주위에 괄호가 없습니다. 당신은 ... values ​​(' "+ 데이터 +"+ "')"; – Theo

+0

'name'과'data'의 값은 무엇입니까? 그리고 데이터베이스에있는'name'과'data'의 정의는 무엇입니까? 또한,'data'는 데이터베이스 열의 매우 나쁜 이름입니다. –

답변

2

NEVER 같이 SQL 명령을 연결해야합니다! 이렇게하면 SQL 주입 공격까지 열립니다.

대신 - 매개 변수를 사용하십시오! 이것은 또한 많은 변환 문제를 없애줍니다.

string comando = "INSERT INTO example (date) VALUES (@DateParam)"; 

을 다음 당신은 당신의 SqlCommand@DateParam을 설정해야합니다 :

그래서 귀하의 경우, 당신은 사용해야

cmd.Parameters.Add("@DateParam", SqlDbType.Date).Value = YourDataValueHere 

를하고는 모든 문제의주의해야합니다!

- 다시 선택하려면 매개 변수를 사용하십시오!

select * 
from example 
where date >= @fromDate and date <= @toDate 

C#에서 실행할 때.

select * 
from example 
where date >= '20141025' and date <= '20141028' 

에서 작동 - 당신이 (MGMT Studio에서) 직접 T-SQL을 사용하는 경우

후 어떤 DATEFORMAT 및/또는 언어 설정 indepdent 인 ISO-8601 형식 YYYYMMDD를 사용 모든 SQL Server 버전과 날짜 형식, 언어 및 지역 설정이 포함됩니다.

+0

예를 보여줄 수 있습니까? –

+0

이 'SqlDbType'을 쓰려고하면 오류가 발생합니다. –

+0

@youarebeenbannedagain : *** *** 오류 *** ???? 화면이 보이지 않고 마음을 읽을 수 없습니다. ..... –

1

테이블이 정말 DATE/DATETIME/DATETIME2/SMALLDATETIME 경우, 당신은 더 많은 같은 일을 더 나을 것 : 마찬가지로

using (SqlCommand cmd = new SqlCommand("INSERT INTO example (date) values (@param)")) 
{ 
    cmd.Paramters.Add("@param", SqlDbType.Datetime).Value = DateTime.Now; 

    cmd.ExecuteNonQuery(); 
} 

, 더 같은 테이블을 조회, 뭔가 :

using (SqlCommand cmd = new SqlCommand("SELECT * FROM example WHERE date BETWEEN @FromDate AND @ToDate")) 
{ 
    cmd.Paramters.Add("@FromDate", SqlDbType.Datetime).Value = DateTime.Now; 
    cmd.Paramters.Add("@ToDate", SqlDbType.Datetime).Value = DateTime.Now; // Of course, you'd probably want to pass through values as parameters to your method 

    // Fill your dataset/get your SqlDataReader, etc. as preferred 
}