如何获取记录从日期到日期的SQL Server
我要解释它的图片和源代码如何获取记录从日期到日期的SQL Server
前设计
后端代码
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数据库
我希望你能清楚地了解它。现在清除错误并改进我的代码/逻辑/查询(^ _ ^)。 BLA BLA唧唧歪歪唧唧歪歪唧唧歪歪
首先,你的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";
这会将日期值转换为您的数据库预期的格式。
此查询从记录中选择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时间 –
在写入数据截图之前,我写了我的答案。查看我的更新。 –
另外,正如@ mm8指出的那样,日期不会作为字符串存储在数据库中。它们是独特的数据类型;请勿将* display *格式与* storage *格式混淆:它们是不同的。上面的代码应该工作得很好,但是。 –
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
数据库不会以任何特定的字符串格式存储日期。日期是一个日期,它没有特定的格式。格式化日期的输出是一个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));
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]; –
这就是你应该如何*不*编写一个查询顺便说一句,DataRowView的是Windows窗体和您已为问题WPF在Windows窗体您使用的价值得到DateTime值。的的DateTimePicker类的属性。 – mm8
请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定时 –
您应该切换到明确的'join'语法。这是1992年以来的标准! – HoneyBadger
我在初学者水平。我不知道加入。根据我自己希望的日期想要记录 –