SQL Query将数据插入数据库

时间:2015-04-12 10:23:12

标签: asp.net sql-server

我试图通过将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();

    }

1 个答案:

答案 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语句中。