2013-09-26 1 views
-2

SQL 문에 오류가 있음을 나타내지 만 새로운 DateTime 2013-09-22를 다음과 같이 전달하려고합니다. 아이디어가 있으십니까?데이터베이스 쿼리에 대해 C#에서 date 매개 변수를 전달할 수 없습니다.

DateTime WeekEnding = new DateTime(2013, 9, 22); 
SqlDataReader myReader = null; 
SqlCommand myCommand = new SqlCommand(
    @"select WeekEnding, sum(Total) as Total " + 
    "from Data where WeekEnding = '@WeekEnding' " + 
    "group by WeekEnding", 
    myConnection); 
myCommand.Parameters.Add("@WeekEnding", SqlDbType.DateTime); 
myCommand.Parameters["@WeekEnding"].Value = WeekEnding; 
myReader = myCommand.ExecuteReader(); 

while (myReader.Read()) 
{ 
    Console.WriteLine("Combined : " + myReader["Total"].ToString()); 
} 
+0

무엇이 오류입니까? – UpQuark

+5

"* 작동하지 않습니다 *"는 문제를 잘 이해하는 데 도움이되지 않습니다. 오류가 있습니까? 아니면 예상 한 결과를 얻지 못하고 있습니까? –

+0

SQL 서버에서 SQL 문을 직접 사용해 보셨습니까? – Andrew

답변

1

매개 변수 주위의 따옴표를 제거해야합니다. 실제 데이터의 표현이 SQL 문자열에 인용 된 경우에도 매개 변수는 항상 인용되지 않습니다.

sidenote에서 SqlDataReader, SqlCommand 및 기타 같은 IDisposable 데이터베이스 개체에 대해 using-blocks을 고려하십시오.

+0

감사합니다. – user549410

0

작은 따옴표로 매개 변수를 묶을 필요가 없으며 매개 변수 없이도 작동합니다. 또한

당신이 DateTime 객체가 날짜와 시간 구성 요소가 기억해야 할 날짜와 협력, 그래서 당신은 확실히 알고있는 경우가 아니면, 함께 >=<=를 사용하여 더 나을 것하면 해당 데이터베이스의 필드는 것입니다 항상 시간 구성 요소를 자정으로 설정하십시오.

이 시도 :

DateTime WeekEnding = new DateTime(2013, 9, 22); 
SqlDataReader myReader = null; 
SqlCommand myCommand = new SqlCommand(
    @"select WeekEnding, sum(Total) as Total " + 
    "from Data where WeekEnding >= @WeekEnding AND WeekEnding <= @WeekEnding" + 
    "group by WeekEnding", 
    myConnection); 
myCommand.Parameters.Add("@WeekEnding", SqlDbType.DateTime); 
myCommand.Parameters["@WeekEnding"].Value = WeekEnding; 
myReader = myCommand.ExecuteReader(); 

while (myReader.Read()) 
{ 
    Console.WriteLine("Combined : " + myReader["Total"].ToString()); 
} 
0

쿼리에서 주위 '@WeekEnding' 따옴표를 제거합니다. 쿼리 텍스트는 것과 같아야합니다 :

@"select WeekEnding, sum(Total) as Total " + 
"from Data where WeekEnding = @WeekEnding " + 
"group by WeekEnding", 
-1

당신은 당신의 목표를 달성하기 위해 인 String.format() 메소드를 사용할 수 있습니다. 예를 들어

:

string query = @"select WeekEnding, sum(Total) as Total 
             from Data where WeekEnding = {0} 
             group by WeekEnding"; 
string sql = String.Format(query,WeekEnding); 
//then 
SqlCommand myCommand = new SqlCommand(sql , myConnection); 
myReader = myCommand.ExecuteReader(); 
while (myReader.Read()) 
{ 
    Console.WriteLine("Combined : " + myReader["Total"].ToString()); 
} 

희망이 도움이됩니다.

+0

소프트웨어에 불규칙적 인 보안 구멍을 열 것을 조언하지 마십시오. 왜 이것이 나쁜 생각인지에 대한 자세한 내용을 보려면 SQL-Injection을 읽어보십시오. – nvoigt

+0

SQL 인젝션에 대해 알고 있습니다. @WeekEnding 매개 변수 값이 사용자 입력에서 나오는 경우 실제로 위험합니다. 그것은 DateTime 인스턴스이므로, 나는 그 것이 나쁜 아이디어라고 생각하지 않습니다. 그러나 당신이 코멘트 주셔서 감사합니다. ; – user123456