[英]How to asynchronously wait join operation and use it second join in c#?
[英]how to use Date between plus Join as one command in c#
這是我的代碼。 兩者之間的日期有效,但是當我添加LEFT JOIN
,它會顯示錯誤:
單詞左邊的語法錯誤
cn.Open();
SqlCommand cmd = cn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT FirstName,LastName,Date,Time,Day from
Attendance where Sn=@Sn and ([Date] between @SD and @ED) left JOIN
EmployeeTable ON Attendance.EmployeeID = EmployeeTable.EmployeeID
Order by Attendance.AttendanceID";
cmd.Parameters.Add(new SqlParameter("@Sn", txtSn.Text));
cmd.Parameters.Add(new SqlParameter("@SD", DTPStart.Text));
cmd.Parameters.Add(new SqlParameter("@ED", DTPEnd.Text));
cmd.ExecuteNonQuery();
DataTable dt = new DataTable();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(dt);
dataGridView2.DataSource = dt;
cn.Close();
您必須保持SQL語句的順序。 首先是join
,然后where
-clause。
更改
SELECT FirstName,LastName,Date,Time,Day from
Attendance where Sn=@Sn and ([Date] between @SD and @ED) left JOIN
EmployeeTable ON Attendance.EmployeeID = EmployeeTable.EmployeeID
Order by Attendance.AttendanceID
至:
SELECT FirstName,LastName,Date,Time,Day from
Attendance left JOIN EmployeeTable ON Attendance.EmployeeID = EmployeeTable.EmployeeID
where Attendance.Sn=@Sn and (Attendance.[Date] between @SD and @ED)
Order by Attendance.AttendanceID
https://technet.microsoft.com/en-us/library/ms190617(v=sql.105).aspx
這是因為你正在使用連接的地方。 它應該在之前和之后,在您處理多個表時嘗試使用別名。 所以CommandText初始化將如下所示
cmd.CommandText = "SELECT b.FirstName,b.LastName,a.Date,a.Time,a.Day" +
" from Attendance a" +
" left JOIN EmployeeTable b ON a.EmployeeID = b.EmployeeID" +
" where a.Sn=@Sn and (a.[Date] between @SD and @ED)" +
" Order by a.AttendanceID";
您得到的錯誤是因為您沒有以正確的方式編寫查詢。 WHERE
子句應始終位於JOIN
語句之后。 還要確保在SQL
查詢中處理JOIN
語句時應使用別名,以便更好地理解。
我已經編輯了你的代碼,你可以用現有代碼替換它:
cn.Open();
SqlCommand cmd = cn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT et.FirstName,et.LastName,at.Date,at.Time,at.Day from
Attendance at left JOIN
EmployeeTable et ON at.EmployeeID = et.EmployeeID
where at.Sn=@Sn and (at.[Date] between @SD and @ED)
Order by Attendance.AttendanceID";
cmd.Parameters.Add(new SqlParameter("@Sn", txtSn.Text));
cmd.Parameters.Add(new SqlParameter("@SD", DTPStart.Text));
cmd.Parameters.Add(new SqlParameter("@ED", DTPEnd.Text));
cmd.ExecuteNonQuery();
DataTable dt = new DataTable();
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(dt);
dataGridView2.DataSource = dt;
cn.Close();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.