0

大家好,目前我有这个代码。我想GivenName"在语句中添加另一个字段“,但问题是它来自另一个表。如何在不改变原始查询输出的情况下将两个数据库表合并到该语句中。

namespace Test
{
    public partial class frmSales : Form
    {
        public frmSales()
        {
            InitializeComponent();
        }


        private void dtpFrom_ValueChanged(object sender, EventArgs e)
        {

        }

        private void btnExtract_Click(object sender, EventArgs e)
        {

            SqlConnection objConn = new SqlConnection("Data Source=abcdefg;Initial Catalog=hello;Persist Security Info=True;User ID=sa;Password=");

                         objConn.Open();

            SqlCommand objCmd = new SqlCommand("SELECT CONVERT(char(80), InvDate,3) AS InvDate,InvoiceNo,EmployerCode,TaxAmount + SubTotal AS Amount,'' AS Payment FROM Invoice WHERE (InvDate >= CONVERT(datetime, '" + dtpFrom.Text + "', 105 )) AND (InvDate <= CONVERT(datetime, '" + dtpTo.Text + "', 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);

            int count = 0;
            while (objReader.Read())
            {

                for (int i = 0; i < 5; 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 < 4)
                    {
                        sw.Write("\t");
                    }

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

            }
            sw.Flush();
            fs.Close();
            objReader.Close();
            objConn.Close();
            MessageBox.Show(count + " records exported successfully.");
            this.Close();
        }

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void dtpTo_ValueChanged(object sender, EventArgs e)
        {

        }

        private void frmSales_Load(object sender, EventArgs e)
        {

        }
    }
}
4

2 回答 2

2

更改 SQL 语句,以便2 个表连接在一起。然后,您可以访问另一列。

于 2012-07-26T07:34:26.147 回答
1

使用JOIN

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

INNER JOIN如果它是一NOT NULL列并且LEFT JOIN当该列是NULL.

因此,您将添加以下内容:

FROM Invoice inv INNER JOIN
    [YourOtherTable] tab ON inv.[SomeID] = tab.[SomeID]

编辑:

好吧,看来[MedicalRecordID] 是最明显的。

FROM [Invoice] inv INNER JOIN 
[PatientDetails] tab ON inv.[MedicalRecordID] = tab.[MedicalRecordID]

请记住,如果您要查找特定PatientDetails记录,则需要ANDWHERE子句中添加另一个记录。

就像是:

AND tab.[LastName] = 'SomeLastName'

编辑:

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);
于 2012-07-26T07:39:04.923 回答