我试图通过将Date转换为dateTime来将日期从Session DateValue插入数据库。我面临的问题是它接受了4月的价值,但是当我输入3月的价值时,给出错误。 请帮助,查询和我使用的代码如下:
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)
我不确定这会解决您的问题,但它会改善您的代码:
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循环之外移动了连接的打开和关闭。没有必要为每个命令执行关闭并重新打开连接。此外,我已按照microsoft的建议将SqlConnection和SqlCommand移动到using语句中。