0

SQL Server 2008 でクエリを実行しています。

SELECT
    CONVERT(char(80), i.InvDate,3) AS InvDate,
    i.InvoiceNo,
    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, '16/10/2012', 105)) AND 
(InvDate <= CONVERT(datetime, '16/10/2012', 105))

出力:

ここに画像の説明を入力

それをC#に入れようとすると、「文字列から日付や時刻を変換するときに変換に失敗しました」と表示されます。


情報: 2012 年 10 月 16 日は、実行されることを確認するためにクエリに挿入しようとしたサンプルの日付です。これは古いプログラムです。そのため、文字列から変換しています。日時形式に関係があると確信しています。http://www.sqlusa.com/bestpractices/datetimeconversion/を見ました。しかし、私はそれに指を置くことはできません。

SqlCommand objCmd = new SqlCommand("SELECT CONVERT(char(80), i.InvDate,3) 

AS InvDate,

i.InvoiceNo, 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, 'dd/MM/yyyy', 105)) 

AND 

(InvDate <= CONVERT(datetime, 'dd/MM/yyyy', 105))", objConn);



        SqlDataReader objReader;
        objReader = objCmd.ExecuteReader();

        System.IO.FileStream fs = new System.IO.FileStream("C:\\CMSExportedData\\Sales-" + 
DateTime.Now.ToString("dd-MM-yyyy") + ".txt", System.IO.FileMode.Create);
        System.IO.StreamWriter sw = new System.IO.StreamWriter(fs,   
System.Text.Encoding.Default);
4

3 に答える 3

1

CONVERT(datetime, 'dd/MM/yyyy', 105)dd/MM/yyyyリテラルテキストを-に変換しようとしていますが、datetime決してうまくいきません。

SqlCommand objCmd = new SqlCommand(@"SELECT CONVERT(char(80), i.InvDate,3) 
AS InvDate,
i.InvoiceNo, 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 >= @StartDate) 
AND 
(InvDate <= @EndDate)", objConn);

objCmd.Parameters.AddWithValue("@StartDate",/* some C# expression that gives you the start date, as a DateTime value */);
objCmd.Parameters.AddWithValue("@EndDate",/* some C# expression that gives you the end date, as a DateTime value */);

上記の最後の 2 行のコメント部分に入力する必要があります。推測では、あなたの前の質問から、 と である可能性がdtpFrom.ValueありdtpTo.Valueます。

于 2012-10-16T06:41:25.283 に答える
1

あなたのに問題はありませんSQL code。複数行の文字列がある場合は、コマンドの二重引用符の前に@( verbatim stringliteral )する必要があるだけです。

SqlCommand objCmd = new SqlCommand(@"SELECT CONVERT(char(80), i.InvDate,3) AS InvDate,
               i.InvoiceNo, 
               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, 'dd/MM/yyyy', 105)) AND 
        (InvDate <= CONVERT(datetime, 'dd/MM/yyyy', 105))", objConn);
于 2012-10-16T05:01:46.020 に答える
0

クエリをストアド プロシージャに移動し、Data Mapper クラスからストアド プロシージャを呼び出したいと思います。

于 2012-10-16T05:06:05.123 に答える