1

かなりイライラしています。はい、C#とSQLサーバーで2週間前の初心者です。気楽に行ってください。このコマンドは、InvDate、InvoiceNo、TaxAmount、およびSubTotalを金額として出力することになっています。また、PatientsDetailsと呼ばれる別のテーブルからPatientdetailsをドラッグすることになっています。両方のキーはMedicalRecordIDです。

SqlCommand objCmd = 
  new SqlCommand("SELECT CONVERT(char(80), inv.[InvDate],3) 
                     AS InvDate,inv.[InvoiceNo],inv.[TaxAmount] + inv.[SubTotal] 
                     AS Amount, 
                     '' AS Payment 
                     FROM [Invoice] inv 
                     LEFT JOIN [PatientDetails] tab 
                     ON inv.[MedicalRecordID] = tab.[MedicalRecordID] 
                     WHERE (inv.[InvDate] >= CONVERT(datetime, '" + 
                                                      dtpFrom.Text + "', 105 )) 
                     AND (inv.[InvDate] <= CONVERT(datetime, '" + 
                                                    dtpTo.Text + "', 105))", 
                   objConn); 

この次の一連のコマンドは、私が望むように印刷することです。

for (int i = 0; i < 4; i++)
{
    if (!objReader.IsDBNull(i))
    {
        string s;
        s = objReader.GetDataTypeName(i);
        //MessageBox.Show(s);
        if (objReader.GetDataTypeName(i) == "char")
        {
            sw.Write(objReader.GetString(i));
        }
        else if (objReader.GetDataTypeName(i) == "money")
        {
            sw.Write(objReader.GetSqlMoney(i).ToString());
        }
        else if (objReader.GetDataTypeName(i) == "nvarchar")
        {
            sw.Write(objReader.GetString(i));
        }
    }

    if (i < 3)
    {
        sw.Write("\t");
    }
}

count = count + 1;
sw.WriteLine();

これは私のSQLクエリであり、SubTotalを追加していないため、明らかに間違っていると思いますが、実際にはこれが必要です。ユーザーにタグ付けされたInvoiceNo、InvDate、SubTotal。

SELECT Invoice.InvDate, 
        Invoice.InvoiceNo, 
        Invoice.TaxAmount + Invoice.SubTotal, 
        PatientDetails.GivenName 
FROM Invoice 
INNER JOIN PatientDetails 
ON (Invoice.MedicalRecordID = PatientDetails.MedicalRecordID)
4

1 に答える 1

1

結果を書き出すには、次のことを試してください

for (int i = 0; i < 4; i++)
{
    if (!objReader.IsDBNull(i))
        sw.Write(objReader.GetValue(i).ToString());
    else
        sw.Write("NULL");

    if (i < 3) 
        sw.Write("\t");
}

count += 1;
sw.WriteLine();

それでもフィールドが不足している場合は、次のようにクエリを記述します

SqlCommand cmd = objConn.CreateCommand();
cmd.CommandText = @"SELECT inv.[InvDate]
                          ,inv.[InvoiceNo]
                          ,inv.[TaxAmount] + inv.[SubTotal] AS Amount
                          ,tab.GivenName
                      FROM [Invoice] inv 
                           LEFT JOIN [PatientDetails] tab 
                                  ON inv.[MedicalRecordID] = tab.[MedicalRecordID] 
                     WHERE inv.[InvDate] BETWEEN @From AND @To";
cmd.Parameters.AddWithValue("@From", fromDate);
cmd.Parameters.AddWithValue("@To", toDate);

WHERE inv.[InvDate] >= @From AND inv.[InvDate] <= @To代わりに使用することもできますBETWEEN

于 2012-07-27T09:43:42.213 に答える