ขอความช่วยเหลือครับ เพิ่งหัดใหม่ ใช้ DatePicker เพื่อเป็นเงื่อนไข Select Date/time ในคำสั่ง SQL ไม่ได้ครับ สงสัยว่าเป็นที่ formate วันเวลา แต่แก้ไม่ถูกครับ
ต้องถามก่อนว่า ตอนนี้ ตอนเก็บค่าจาก screen นี้ คุณเก็บอย่างไรครับ เพราะ จ่ะไป query ใน sql server ต้องใส่เป็น format ทีถูกต้องไปอยุ่แล้ว ง่ายๆเลยตอนนี้ ตอนเก็บค่าแล้วส่งเข้าไป sql ลองทำให้อยู่ใน format "yyyy-mm-dd" (ex. "2018-03-03") ดูครับ
Date :
2018-03-03 17:15:26
By :
alone2534
ทำไมไม่ใช้เครื่องมือในการคิวรี่ มีการ binding data type เป็น datetime ไปเลยล่ะครับ มาต่อ string เองทำไม
Date :
2018-03-03 18:54:11
By :
Chaidhanan
คือ ตอนนี้แก้ให้ใช้ได้แล้วครับ ถ้าลบ "11:59:59 PM'" ออก ตรง Enddate น่ะครับ พอดีว่าจะดึง Time Attendance จนครบเวลาก่อนเที่ยงคืนน่ะครับ พอดีว่า ถ้าเขียน code query บน sql management studio มันไม่มีปัญหาอะไรครับ ยังไงแนะนำด้วยนะครับ ขอบคุณครับ
Date :
2018-03-03 19:01:42
By :
thanongb42
ดูโค้ดใน SQL และ โค้ดใน vb.net หน่อยครับ ตอนนี้ยังยังไงไปแล้วมั่ง
Date :
2018-03-03 21:40:27
By :
Dr.K
ตอนนี้แก้ได้แล้วครับเอา 11:59:59 PM ออก และเปลี่ยนเป็น dateStart.Value.ToString() แค่ไม่เข้าใจว่าทำไมใส่ 11:59:59 PM ต่อท้าย dateEnd แล้ว Query Error
Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace TestConnectSQL
{
public partial class Form2 : Form
{
SqlDataAdapter sda;
SqlCommandBuilder scb;
DataTable dt;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
}
private void label1_Click(object sender, EventArgs e)
{
}
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
}
private void btnOK_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection("Data Source=LENOVO\\SQLEXPRESS;Initial Catalog=ContinuumDB;Persist Security Info=True;User ID=Andover97;Password=Pyramid97");
sda = new SqlDataAdapter(@"SELECT AccessEvent.TimeStamp,AccessEvent.CardType, AccessEvent.SiteCode, AccessEvent.Message, AccessEvent.NonABACardNumber, Personnel.FirstName, Personnel.LastName
FROM AccessEvent INNER JOIN
Personnel ON AccessEvent.PersonIdLo = Personnel.ObjectIdLo
WHERE AccessEvent.TimeStamp BETWEEN '" + dateStart.Value.ToString() + "' AND '" + dateEnd.Value.ToString()+ "'", con);
dt = new DataTable();
sda.Fill(dt);
dataGridView1.DataSource = dt;
}
/// <summary>
/// Exports the datagridview values to Excel.
/// </summary>
private void ExportToExcel()
{
// Creating a Excel object.
Microsoft.Office.Interop.Excel._Application excel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel._Workbook workbook = excel.Workbooks.Add(Type.Missing);
Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
try
{
worksheet = workbook.ActiveSheet;
worksheet.Name = "ExportedFromDatGrid";
int cellRowIndex = 1;
int cellColumnIndex = 1;
//Loop through each row and read value from each column.
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
// Excel index starts from 1,1. As first Row would have the Column headers, adding a condition check.
if (cellRowIndex == 1)
{
worksheet.Cells[cellRowIndex, cellColumnIndex] = dataGridView1.Columns[j].HeaderText;
}
else
{
worksheet.Cells[cellRowIndex, cellColumnIndex] = dataGridView1.Rows[i].Cells[j].Value.ToString();
}
cellColumnIndex++;
}
cellColumnIndex = 1;
cellRowIndex++;
}
//Getting the location and file name of the excel to save from user.
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.Filter = "Excel files (*.xlsx)|*.xlsx|All files (*.*)|*.*";
saveDialog.FilterIndex = 2;
if (saveDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
workbook.SaveAs(saveDialog.FileName);
MessageBox.Show("Export Successful");
}
}
catch (System.Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
excel.Quit();
workbook = null;
excel = null;
}
}
private void btnExport_Click(object sender, EventArgs e)
{
ExportToExcel();
}
private void dateTimePicker2_ValueChanged(object sender, EventArgs e)
{
}
//********************************************************//
}
}
Date :
2018-03-03 23:42:19
By :
thanongb42
คุณ Chaidhanan ที่บอกว่า ใช้เครื่องมือในการคิวรี่ มีการ binding data type เป็น datetime ผมยังทำไม่เป็นครับยังไงขอตัวอย่างได้ไหมครับ
ขอบคุณมากครับ
Date :
2018-03-03 23:53:48
By :
thanongb42
อันนี้ครับ Code SQL ที่ขอดูครับ
Code (SQL)
/****** Script for SelectTopNRows command from SSMS ******/
SELECT AccessEvent.TimeStamp,AccessEvent.CardType, AccessEvent.SiteCode, AccessEvent.Message, AccessEvent.NonABACardNumber, Personnel.FirstName, Personnel.LastName
FROM AccessEvent INNER JOIN
Personnel ON AccessEvent.PersonIdLo = Personnel.ObjectIdLo
WHERE AccessEvent.TimeStamp BETWEEN '2/10/2018' AND '2/21/2018 11:59:59 PM'
Date :
2018-03-04 10:14:55
By :
thanongb42
Code (SQL)
BETWEEN '2/10/2018' AND '2/21/2018 11:59:59 PM'
คำสั่งเปรียบเทียบข้างบน เป็นการเปรียบเทียบแบบ text ทำให้ผิดผลาดได้
ให้ใช้ format yyyy-mm-dd hh:mm:ss กำหนดตำแหน่งให้ชัดเจนในเรื่องของ priority ตามหลักคณิตศาสตร์
แต่แนะนำให้ใช้ เครื่องมือเพราะจะช่วย เรื่อง sql injection ด้วย
Date :
2018-03-04 10:55:51
By :
Chaidhanan
ลืมบอกไปข้อหนึ่ง
เดือน ต้องใช้ MM ครับ mm จะเป็น นาที
Date :
2018-03-04 11:42:42
By :
Dr.K
ลืมอีกแล้ว
การเช็ค format ควรจะดูให้ตรงกันเปะๆ เช่น ปีที่ได้จาก datetimepicker อาจจะได้ค่าออกมาเป็น 2561 แต่ใน data เป็น 2018
แบบนี้เวลาค้นก็จะไม่เจอค่าเหมือนกัน
เอาให้ชัว อาจจะกำหนดไปเลยว่าเป็น US
Code (VB.NET)
strSQL1 = "SELECT * FROM table WHERE DateTime BETWEEN '" + dateTimePicker1.Value.ToString("MM/dd/yyyy", new CultureInfo("en-US")) + "' AND '" + dateTimePicker2.Value.ToString("MM/dd/yyyy", new CultureInfo("en-US")) + " 11:59:59 PM'"
Date :
2018-03-04 11:49:58
By :
Dr.K
ถ้าผมใส่ 11:59:59 PM ดังใน code รันยัง ไม่ผ่านครับ
Code (SQL)
WHERE AccessEvent.TimeStamp BETWEEN '" + dateStart.Value.ToString("MM/dd/yyyy", new CultureInfo("en-US")) + "' AND '" + dateEnd.Value.ToString("MM/dd/yyyy hh:mm:ss", new CultureInfo("en-US")) + "11:59:59 PM'", con);
แต่ถ้าลบออก ก็ผ่านฉลุยครับ
Code (SQL)
SqlConnection con = new SqlConnection("Data Source=LENOVO\\SQLEXPRESS;Initial Catalog=ContinuumDB;Persist Security Info=True;User ID=Andover97;Password=Pyramid97");
sda = new SqlDataAdapter(@"SELECT AccessEvent.TimeStamp,AccessEvent.CardType, AccessEvent.SiteCode, AccessEvent.Message, AccessEvent.NonABACardNumber, Personnel.FirstName, Personnel.LastName
FROM AccessEvent INNER JOIN Personnel ON AccessEvent.PersonIdLo = Personnel.ObjectIdLo
WHERE AccessEvent.TimeStamp BETWEEN '" + dateStart.Value.ToString("MM/dd/yyyy", new CultureInfo("en-US")) + "' AND '" + dateEnd.Value.ToString("MM/dd/yyyy hh:mm:ss", new CultureInfo("en-US")) + "'", con);
ผลลัพะ์ที่ได้ครับ
การเลือกแบบนี้ การใส่เวลา hh:mm:ss PM มันจำเป็นต้องใส่ไหมครับ กรณีนี้
ขอบคุณมากๆ ทุกคำแนะนำครับ
Date :
2018-03-04 12:26:25
By :
thanongb42
ก๊อบ SQL จาก sql management studio โดยที่ไม่ต้องแก้อะไร แล้วเอามาลงใน vb ดูว่ารันแล้ว Error รึป่าว
Date :
2018-03-04 13:32:03
By :
Dr.K
Load balance : Server 02