 |
|
สอบถามการใช้ SQL Server Select มีเงื่อนไข 2 ตัว และนำมาแสดงรายงาน |
|
 |
|
|
 |
 |
|
ไม่ต้องทำการ Join Table แต่เพียงต้องการให้เงื่อนไข 2 เงื่อนไข Date กับ SeriaiNo <<< Field ซึ่งอยู่ใน Table เดียวกันครับ
|
 |
 |
 |
 |
Date :
2013-08-30 08:19:28 |
By :
ih4cK |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (SQL)
SELECT * FROM TotalPrint WHERE (DateSavePrint BETWEEN @date1 AND @date2) AND (SerialNo=@SerialNo)
งงอะไรอะ งงเบย 
|
 |
 |
 |
 |
Date :
2013-08-30 09:22:02 |
By :
01000010 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Solution 1. Multiple Result set
sb.Append("; SELECT SerialNo FROM TotalPrint")
Code (VB.NET)
Dim objConn As New SqlConnection
Dim objCmd As New SqlCommand
Dim dtAdapter As New SqlDataAdapter
Dim ds As New DataSet
Dim dt As DataTable
Dim dt1 As DataTable '*****
Dim strConnString, strSQL As String
strConnString = "Data Source=.\SQLEXPRESS;Initial Catalog=LAHWINFO;Integrated Security=True"
Dim sb As StringBuilder = New StringBuilder
sb.Remove(0, sb.Length())
sb.Append("SELECT * FROM TotalPrint")
sb.Append(" WHERE (DateSavePrint BETWEEN @date1 AND @date2)")
sb.Append("; SELECT SerialNo FROM TotalPrint") '*****
sb.Append(" WHERE (SerialNo=@SerialNo)")
strSQL = sb.ToString()
objConn.ConnectionString = strConnString
With objCmd
.Parameters.Clear()
.Parameters.Add("@date1", SqlDbType.SmallDateTime).Value = dtpStartSearch.Value.ToShortDateString
.Parameters.Add("@date2", SqlDbType.SmallDateTime).Value = dtpEndSearch.Value.ToShortDateString
.Parameters.Add("@SerialNo", SqlDbType.NVarChar).Value = cboNamePrint.SelectedIndex
.CommandText = strSQL
.CommandType = CommandType.Text
.Connection = objConn
End With
dtAdapter.SelectCommand = objCmd
dtAdapter.Fill(ds, "myDataTable")
dt = ds.Tables(0)
dt1 = ds.Tables(1) '*****
dtAdapter = Nothing
objConn.Close()
objConn = Nothing
Dim rpt As New ReportDocument()
Dim directory As String = My.Application.Info.DirectoryPath
'rpt.Load(directory & "\myCrystalReport1.rpt")
rpt.Load("C:\CrystalReport2.rpt")
rpt.SetDataSource(dt)
Me.CrystalReportViewer1.ReportSource = rpt
Me.CrystalReportViewer1.Refresh()
Solution 2. Change Query
Code (VB.NET)
Dim sb As StringBuilder = New StringBuilder
sb.Remove(0, sb.Length())
sb.Append("SELECT * FROM TotalPrint")
sb.Append(" WHERE (DateSavePrint BETWEEN @date1 AND @date2)")
sb.Append(" AND (SerialNo=@SerialNo)")
strSQL = sb.ToString()
|
 |
 |
 |
 |
Date :
2013-08-30 09:28:05 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
จริง ๆ ผมเขียนแบบนี้ล่ะครับ
Code (VB.NET)
Dim sb As StringBuilder = New StringBuilder
sb.Remove(0, sb.Length())
sb.Append("SELECT * FROM TotalPrint")
sb.Append(" WHERE (DateSavePrint BETWEEN @date1 AND @date2)")
sb.Append(" AND (SerialNo=@SerialNo)")
strSQL = sb.ToString()
แต่ไปผิดตรงที่ Combo ที่ดึงออกมาชื่อมันซ้ำ ตอนนี้เปลี่ยนไปใช้เป็น SerialNo เลย ได้ล่ะครับ ยังไงก็ขอบคุณครับ :D
|
 |
 |
 |
 |
Date :
2013-08-31 13:37:19 |
By :
ih4cK |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
วิเคราะห์ SourceCode
Code (VB.NET)
Dim sb As StringBuilder = New StringBuilder
sb.Remove(0, sb.Length()) 'เหมือนกับลอกเขามาทั้งดุ้น ไม่เคยเปลี่ยนแปลง
เขียนแบบนี้ไม่ดีกว่าหรือ?
Code (VB.NET)
Dim sb As StringBuilder()
'Clear String Builder
sb = New StringBuilder() 'sb.Remove(0, sb.Length())
sb.Append("...")
'Clear String Builder
sb = New StringBuilder() 'sb.Remove(0, sb.Length())
sb.Append("...")
[x] ผมคิดว่า VS2013-15 น่าจะมีคำสั่งนี้ sb.Clear() ให้เรียกใช้งาน
|
 |
 |
 |
 |
Date :
2013-08-31 15:02:43 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|