2017-03-01 152 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定時 –

相關問題