[asp.net]将数据插入到数据库的 SQL 查询

标签: Asp.net SQLServer
发布时间: 2017/3/26 4:55:10
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图将日期插入到数据库从会话 DateValue 通过将它转换为日期时间。我面临的问题是其接受的值 4 月个月,但当我进入三月它给错误的值。 请帮助查询和我已经使用的代码如下︰

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:

我不确定这会解决你的问题,但它会提高你的代码︰

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 参数获取到一个特定的日期格式,并通知数据库所需的格式,使用转换功能。这应能修复你的转换问题。

其他改进︰ 我搬出 foreach 循环连接的开合。那里是没有需要关闭并重新打开该连接的每个命令的执行。此外,我已搬进 SqlConnection 和 SqlCommand using语句,根据微软的建议。

赞助商