2015-04-12 152 views
0

我想通过将其转换为dateTime将日期插入到Session DateValue的数据库中。我面临的问题是它接受四月份的价值,但是当我输入三月份的价值错误时。 请帮帮忙,我已经使用了查询和代码如下:SQL查询插入数据到数据库

string a = Session["Date_Value"].ToString(); 
DateTime date= DateTime.Parse(a); 

foreach (GridViewRow g1 in grdData.Rows) 
     { 

      //string Status = (g1.FindControl("TextBox1") as TextBox).Text; 
      //int Status = Convert.ToInt32(Sta); 

      SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Real_Attendance"].ConnectionString); 

      SqlCommand cmd = new SqlCommand("Insert into Attendanc(Stu_id,Status,time,Date,Sub_id) values('" + g1.Cells[3].Text + "',@Status,'" + Session["Time_Value"].ToString() + "', @Date ,'" + Session["Sub_id"].ToString() + "')", con); 
      //SqlCommand cmd = new SqlCommand("Insert into Attendanc(Stu_id,Status,time,Date,Sub_id) values('" + g1.Cells[3].Text + "','"+ g1.Cells[1].Text +"','" + Session["Time_Value"].ToString() + "','" + Session["Date_Value"].ToString() + "','" + Session["Sub_id"].ToString() + "')", con); 
      //cmd.Parameters["@Status"].Value = ((Label)(g1.FindControl("Label1"))).Text; 
      cmd.Parameters.AddWithValue("@Status", ((Label)(g1.FindControl("Label1"))).Text); 
      cmd.Parameters.AddWithValue("@Date", date.ToShortDateString()); 
      // cmd.Parameters.AddWithValue("@Date", date.ToShortDateString()); 

      con.Open(); 

      cmd.ExecuteNonQuery(); 
      con.Close(); 

}

这是我用来创建会话的代码。我在webform3创建会话,并在webform4

protected void Calendar1_SelectionChanged(object sender, EventArgs e) 
    { 
     Calendar1.Visible = false; 
     System.DateTime myDate = new System.DateTime(); 
     myDate = Calendar1.SelectedDate; 
     txtDate.Text = myDate.ToString("dd/MM/yyyy"); 
     Date = txtDate.Text; 
     day = Calendar1.SelectedDate.DayOfWeek.ToString(); 
     Response.Write(day); 
     txtday.Text = day; 
     Session["Date_Value"] = Date; 
     //SelectTime(); 

    } 
+0

你在哪里以及如何在会话中设置日期值?请提供代码 –

+0

你得到哪个错误? – Legends

+0

从字符串转换日期和/或时间时转换失败。 – user2747666

回答

0

使用它的价值我不知道这将解决你的问题,但它会提高你的代码:

string a = Session["Date_Value"].ToString(); 
DateTime date= DateTime.Parse(a); 
using(SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["Real_Attendance"].ConnectionString)) 
{ 
    con.Open(); 
    foreach (GridViewRow g1 in grdData.Rows) 
    { 

     using(SqlCommand cmd = new SqlCommand("Insert into Attendanc (Stu_id,Status,time,Date,Sub_id) values (@Stu_id, @Status, @Time, Convert(DateTime, @Date, 103), @Sub_id)", con)) 
     { 
      cmd.Parameters.AddWithValue("@Stu_id", g1.Cells[3].Text); 
      cmd.Parameters.AddWithValue("@Status", ((Label)(g1.FindControl("Label1"))).Text); 
      cmd.Parameters.AddWithValue("@Time", Session["Time_Value"].ToString()); 
      cmd.Parameters.AddWithValue("@Date", date.ToString("dd/MM/yyyy")); 
      cmd.Parameters.AddWithValue("@Sub_id", Session["Sub_id"].ToString()); 
      cmd.ExecuteNonQuery(); 
     } 
    } 
    con.Close(); 
} 

首先,我已经改变sql语句只有参数。它更清洁,更安全,更易于阅读和调试。

其次,我已将@Date参数的值更改为特定日期格式,并使用Convert函数将预期格式通知数据库。这应该可以解决您的转换问题。

其他改进:我已经移动了foreach循环之外的连接的打开和关闭。不需要关闭并重新打开每个命令执行的连接。另外,我已经将SqlConnection和SqlCommand移动到using语句中,正如Microsoft推荐的那样。