2

私のコーディングに何か問題があると思います。私が推測する日付でフィルタリングしていません。助けてください

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# コード:

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);

これは私が達成したいことです:

ここに画像の説明を入力

これは私が得るものです:

ここに画像の説明を入力

ここから追い出される前に。私はいくつかの編集を行います。

編集:

DateTime は 105 形式 (dd-mm-yyyy) です

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

これは、特定の日付から選択することになっています。例: 2012 年 10 月 11 日から 2012 年 10 月 15 日まで。

DateTimepicker がなくても、出力に「GivenName」が表示されません

4

2 に答える 2

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);
于 2012-10-15T06:58:12.357 に答える
-1

この問題は、date 型から char 型への変換が原因であり、フィルタリングが期待どおりに機能しない可能性があります。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);
于 2012-10-11T05:39:16.353 に答える