2012-10-11 4 views
2

코딩에 문제가 있다고 생각됩니다. 그것은 날짜에 의해 필터링되지 않습니다. 도와주세요SQL Server 및 C#에서의 출력이 다릅니다

SQL 코드 :

SELECT 
    CONVERT(char(80), i.InvDate,3) AS InvDate, 
    i.InvoiceNo, 
    i.EmployerCode, 
    i.TaxAmount + i.SubTotal AS Amount, 
    '' AS Payment, 
    pd.GivenName 
FROM 
    dbo.Invoice i 
INNER JOIN 
    dbo.PatientDetails pd ON (pd.MedicalRecordID = i.MedicalRecordID) 

C# 코드 : 이것은 내가 무엇을 얻을

http://i47.tinypic.com/167trt3.png

: 이것은 내가 달성하고자하는 것입니다

SqlCommand objCmd = new SqlCommand("SELECT CONVERT(char(80), i.InvDate,3) AS InvDate, 
    i.InvoiceNo, 
    i.EmployerCode, 
    i.TaxAmount + i.SubTotal AS Amount, 
    '' AS Payment, 
    pd.GivenName 
FROM 
    dbo.Invoice i 
INNER JOIN dbo.PatientDetails pd ON (pd.MedicalRecordID = i.MedicalRecordID) 
WHERE (InvDate >= CONVERT(datetime, '" + dtpFrom.Text + "', 105)) 
    AND (InvDate <= CONVERT(datetime, '" + dtpTo.Text + "', 105))," , objConn); 

http://i50.tinypic.com/28m2z5x.png

내가 여기에서 출발하기 전에. 나는 약간의 편집을 할 것이다.

편집 :

날짜 시간이이 특정 날짜를 선택하도록되어

WHERE (InvDate >= CONVERT(datetime, '" + dtpFrom.Text + "', 105)) 
AND (InvDate <= CONVERT(datetime, '" + dtpTo.Text + "', 105)) 

105 형식 (DD-MM-YYYY)입니다. EG : 2009 년 10 월 2012 년 11

에도있는 DateTimePicker없이 10월 2012 년 15, 출력은

+2

귀하의 VB 코드는 C# 코드 모양을 할 수있는 제약이있는 경우 얼마나 그것에 대해 죄송합니다 – Habib

+0

는 태그 : – Newbie

+2

변경 귀하의 VB 코드와 관련된 SQL 코드? 그들은 동일한 의미가 있다면, 당신의 SQL 코드는 VB 코드에있는 WHERE 절을 가지고 있지 않다. – rikitikitik

답변

1

가장 좋은 방법은 DD에 입력/MMM/yyyy 형식을 포맷하는 것입니다. SqlServer가 월과 일을 식별하는 데 도움이됩니다. SqlServer와 통신 할 때마다 MMM 형식을 사용하는 것이 좋습니다.

DateTime fromDate, toDate; 
fromDate = DateTime.Parse(dtpFrom.Text); 
toDate = DateTime.Parse(dtpTo.Text); 

SqlCommand objCmd = new SqlCommand("SELECT CONVERT(char(80), i.InvDate,3) AS InvDate, 
i.InvoiceNo, 
i.EmployerCode, 
i.TaxAmount + i.SubTotal AS Amount, 
'' AS Payment, 
pd.GivenName 
FROM dbo.Invoice i 
INNER JOIN dbo.PatientDetails pd ON (pd.MedicalRecordID = i.MedicalRecordID) 
WHERE datediff(d, '" + fromDate.ToString("dd/MMM/yyyy") + "', i.InvDate) >=0 
AND datediff(d, '" + toDate.ToString("dd/MMM/yyyy") + "', i.InvDate) <=0", objConn); 

또는 변환, 위와 같이 입력하여 CONVERT()

SqlCommand objCmd = new SqlCommand("SELECT CONVERT(char(80), i.InvDate,3) AS InvDate, 
i.InvoiceNo, 
i.EmployerCode, 
i.TaxAmount + i.SubTotal AS Amount, 
'' AS Payment, 
pd.GivenName 
FROM dbo.Invoice i 
INNER JOIN dbo.PatientDetails pd ON (pd.MedicalRecordID = i.MedicalRecordID) 
WHERE datediff(d, CONVERT(datetime, '" + dtpFrom.Text + "', 105), i.InvDate) >=0 
AND datediff(d, CONVERT(datetime, '" + dtpTo.Text + "', 105), i.InvDate) <=0", objConn); 
+0

안녕하세요 @vinodpthmn, MMM 형식을 사용하면 문자열이 유효한 "DateTime"오류로 인식되지 않습니다. 두 번째 옵션을 사용하면 이전과 같이 출력됩니다. txt 파일에 pd.GivenName이 표시되지 않습니다. – Newbie

+0

config 파일의 전역 화를 변경하여 작동하는지 확인해 보겠습니다. – Newbie

+0

dtpFrom/dtpTo에 잘못된 값을 전달했기 때문에 "문자열이 유효한 DateTime으로 인식되지 않습니다."오류입니다. 당신은 DateTime.TryParse()를 시도 할 수 있고 두 번째 옵션은 같은 이유로 인해 작동하지 않는 lso입니다. dtpFrom/dtpTo의 값을 확인하고 올바른 datetime을 전달하는지 확인하십시오. – eka

-1

문제는 숯불하는 타입 일의 변환에 기인 나에게 "givenName과"을 표시하지 않습니다, 필터링이 작동하지 않을 수 있습니다 당신이 예상했던대로. datediff를 사용해보십시오, 그것은 속임수입니다.

SqlCommand objCmd = new SqlCommand("SELECT CONVERT(char(80), i.InvDate,3) AS InvDate, 
i.InvoiceNo, 
i.EmployerCode, 
i.TaxAmount + i.SubTotal AS Amount, 
'' AS Payment, 
pd.GivenName 
FROM dbo.Invoice i 
INNER JOIN dbo.PatientDetails pd ON (pd.MedicalRecordID = i.MedicalRecordID) 
WHERE datediff(d, '" + dtpFrom.Text + "', i.InvDate) >=0 
AND datediff(d, '" + dtpTo.Text + "', i.InvDate) <=0", objConn); 
+0

안녕하세요, 잘못된 구문 오류로 저를 다시 던졌습니다. – Newbie

+0

안녕하세요, 오타 (0에 가까운 쉼표)로 인해 위의 답변에서 제거되었습니다. 다시 시도하십시오. – eka

+0

안녕하세요. @vinodpthmn, 도와 주셔서 감사합니다. 그러나 그것은 나에게 또 다른 오류를 준다. varchar 데이터 형식을 datetime 데이터 형식으로 변환하면 범위를 벗어나는 값이 발생합니다. 잘못이 아니라면, 내가 요구하는 ISO 105를 지정하지 않습니다. – Newbie

관련 문제