2017-03-01 117 views
-2

我要解释它的图片和源代码如何获取记录从日期到日期的SQL Server

前设计

enter image description here

后端代码

private void AddRecord(object sender, RoutedEventArgs e) 
    { 
     string date = datee.Text + " " + DateTime.Now.ToLongTimeString(); 
     if (datee.Text == "" || cusname.SelectedValue == null || Vanda.SelectedValue == null || price.SelectedValue == null || bags.Text == "") 
     { 
      MessageBox.Show("please fill the data"); 
     } 
     else 
     { 

      DataRowView dt = (DataRowView)Vanda.SelectedItem; 
      string vda = dt["vanda"].ToString(); 
      DataRowView dt2 = (DataRowView)price.SelectedItem; 
      string data2 = dt2["price"].ToString(); 
      decimal dta = Convert.ToDecimal(data2); 
      Int32 pricee = Convert.ToInt32(dta); 
      decimal bag = Convert.ToDecimal(bags.Text); 
      decimal credit = pricee * bag; 
      DataRowView cus = (DataRowView)cusname.SelectedItem; 

      string cusidd = cus["id"].ToString(); 
      int cusid = Convert.ToInt16(cusidd); 
      con.Open(); 
      SqlCommand cmd5 = new SqlCommand("SELECT price - retailprice FROM vanda where vanda = '" + vda + "' and price = '" + pricee + "'", con); 
      SqlDataReader reader = cmd5.ExecuteReader(); 
      reader.Read(); 
      string val = reader.GetValue(0).ToString(); 
      decimal valu = Convert.ToDecimal(val); 
      Int32 profit = Convert.ToInt32(valu); 
      reader.Close(); 
      SqlCommand cmd3 = new SqlCommand("insert into records (cusid,datee,description,vanda,price,bag,credit,debit,profit) values ('" + cusid + "','" + date + "','" + des.Text + "','" + vda + "','" + pricee + "','" + bags.Text + "','" + credit + "','','"+profit+"')", con); 
      cmd3.ExecuteNonQuery(); 
      MessageBox.Show("Data Inserted"); 
      con.Close(); 

     } 

    } 

DataGrid代码

private void enddate_SelectedDateChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (startdate.Text == "") 
     { 
      MessageBox.Show("Please Select Starting Date"); 
     } 
     else 
     { 
      con.Open(); 
      SqlDataAdapter adapter = new SqlDataAdapter(" i need here Query ", con); 
      DataSet ds = new DataSet(); 
      adapter.Fill(ds); 
      data.DataContext = ds.Tables[0]; 
     } 

    } 

SQL Server数据库

enter image description here

我希望你能清楚地了解它。现在清除错误并改进我的代码/逻辑/查询(^ _ ^)。 BLA BLA唧唧歪歪唧唧歪歪唧唧歪歪

+0

您应该切换到明确的'join'语法。这是1992年以来的标准! – HoneyBadger

+0

我在初学者水平。我不知道加入。根据我自己希望的日期想要记录 –

回答

1

首先,你的SQL应该使用命名参数,以避免SQL注入攻击:

select r.datee,c.name,r.description,r.vanda,r.price,r.bag,r.credit,r.debit 
from records as r, 
    customer as c 
where r.cusid = c.id 
     and c.name = @cname 
     and r.datee BETWEEN @startDate AND @endDate 

当你创建这些变量,你会通过插入到您的查询中,格式如下:

var startDate = DateTime.Parse(datee.Text).ToString("M/d/yyyy"); 
var endDate = DateTime.Now.ToString("M/d/yyyy") + " 23:59:59"; 

这会将日期值转换为您的数据库预期的格式。

+0

此查询从记录中选择r.datee,c.name,r.description,r.vanda,r.price,r.bag,r.credit,r.debit作为r,客户为C其中r.cusid = c.id和c.name = @cname和r.datee BETWEEN'“++”'AND'“++”'不完美,它只是显示记录具有00:00: 00时间 –

+0

在写入数据截图之前,我写了我的答案。查看我的更新。 –

+0

另外,正如@ mm8指出的那样,日期不会作为字符串存储在数据库中。它们是独特的数据类型;请勿将* display *格式与* storage *格式混淆:它们是不同的。上面的代码应该工作得很好,但是。 –

1
select r.datee,c.name,r.description,r.vanda,r.price,r.bag,r.credit,r.debit 
from records r 
JOIN customer c ON r.cusid = c.id 
WHERE c.name = 'aizaz' AND DateColumn BETWEEN StartDate AND EndDATE 
0

数据库不会以任何特定的字符串格式存储日期。日期是一个日期,它没有特定的格式。格式化日期的输出是一个UI的事情。

您使用SelectedDate属性获得DatePicker的实际DateTime值。您应该使用将这些值作为参数传递给您的命令:

SqlCommand cmd = new SqlCommand("select r.datee,c.name,r.description,r.vanda,r.price,r.bag,r.credit,r.debit from records as r, customer as c where r.cusid = c.id and c.name = @cname and r.datee BETWEEN @startDate AND @endDate"); 
cmd.Parameters.AddWithValue("@startDate", datePicker1.SelectedDate.Value.Date); 
cmd.Parameters.AddWithValue("@endDate", datePicker2.SelectedDate.Value.Date.AddHours(23).AddMinutes(59).AddSeconds(59)); 
+0

string start = startdate.Text; string end = enddate.Text; DataRowView name =(DataRowView)nme.SelectedItem; con.Open(); SqlDataAdapter adapter = new SqlDataAdapter(“select r.datee,c.name,r.description,r.vanda,r.price,r.bag,r.credit,r.debit from r,customer as c where r .cusid = c.id和c。名称=” +名称+ “”和r.datee BETWEEN ' ”+开始+“' AND ' ”+端+“'”,CON); 的DataSet DS =新的DataSet(); adapter.Fill(DS); grid.DataContext = ds.Tables [0]; –

+0

这就是你应该如何*不*编写一个查询顺便说一句,DataRowView的是Windows窗体和您已为问题WPF在Windows窗体您使用的价值得到DateTime值。的的DateTimePicker类的属性。 – mm8

+0

请imrove这个代码..这个查询选择r.datee,c.name,r.description,r.vanda,r.price,r.bag,r.credit,r.debit从记录为r,以客户为C,其中r.cusid = c.id和c.name = @cname和BETWEEN ' “++”' AND r.datee ' “++”' 不健全,这只是表明recoreds有00 :00:00定时 –