在两个datetimepicker之间显示数据,“条件表达式中的数据类型不匹配”

时间:2018-06-18 09:11:44

标签: c# datetimepicker datetime-format

我不知道这可能是什么问题。

  

标准表达式中的数据类型不匹配

这是我目前的代码:

using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;


namespace NiceyBurgerJunction
{
    public partial class frmSales : Form
{

 OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source = C:\Users\mariel\Desktop\NiceyBurgerJunction\NiceyBurgerJunctionDB.accdb");

int count;


    public frmSales()
    {
        InitializeComponent();
    }

    private void btnWeeklySales_Click(object sender, EventArgs e)
    {

        try
        {
            count = 0;
            DateTime from, to;

            from = Convert.ToDateTime(dateTimePicker1.Value);
            to = Convert.ToDateTime(dateTimePicker2.Value);

            dateTimePicker1.Format = DateTimePickerFormat.Short;
            dateTimePicker2.Format = DateTimePickerFormat.Short;

            con.Open();
            OleDbCommand cmd = con.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "SELECT ProdName,SubTotal,OrderDate from EmployeeSale WHERE OrderDate BETWEEN '" + from.ToString("MM/dd/yyyy") + "' AND '" + to.ToString("MM/dd/yyyy") + "' ";
            cmd.ExecuteNonQuery();

            DataTable dt = new DataTable();
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
            da.Fill(dt);
            da.SelectCommand = cmd;
            count = Convert.ToInt32(dt.Rows.Count.ToString());
            dataGridView1.DataSource = dt;

            if (count == 0)
            {
                MessageBox.Show("No records found!");
            }

            con.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(" ERROR " + ex);
        }
    }
}

enter image description here

我的数据库设计格式正确为“OrderDate”,其属性为日期/时间......

1 个答案:

答案 0 :(得分:0)

看起来传递给SQL语句的日期格式不正确。 我想它应该是YYYY-MM-DD而不是MM / DD / YYYY。 还要考虑使用带参数的语句。这样你就可以传递你拥有的DateTime,驱动程序将负责格式化。您可以使用DbCommand.Paramerers.Add API,然后将参数引用为@from@to

在此处阅读使用参数:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters(v=vs.110).aspx

你的代码中也存在一些缺陷(比如用ExecuteNonQuery执行一次命令,在你无缘无故地读取它们的值之后设置日期时间选择器的格式......)。

欢呼声