C# 如何将gridview内容存储到数据库表中

C# 如何将gridview内容存储到数据库表中,c#,C#,我有一个只有一列的gridview。我编写了如下代码 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { SqlConnection con = new SqlConnection(strConnString); con.Open(); for (int i = 0; i < GridView1.Rows.Count; i++

我有一个只有一列的gridview。我编写了如下代码

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        SqlConnection con = new SqlConnection(strConnString); 
        con.Open();

        for (int i = 0; i < GridView1.Rows.Count; i++)
       {
            string Users = GridView1.Rows[i].Cells[0].Text;

            string strQuery = "insert into Table1 (FileName, DateTimeUploaded, Type, Username)" +
            " values(@FileName, @DateTimeUploaded, @Type, @Username)";
            SqlCommand cmd = new SqlCommand(strQuery);

            cmd.Parameters.AddWithValue("@FileName", datalink);
            cmd.Parameters.AddWithValue("@Type", ext);
            cmd.Parameters.AddWithValue("@DateTimeUploaded", DateTime.Now);
            cmd.Parameters.AddWithValue("@Username", Users);

            cmd.CommandType = CommandType.Text;
            cmd.Connection = con;
            cmd.ExecuteNonQuery();

       }
        con.Close();
        con.Dispose();

          }
受保护的无效GridView1\u行数据绑定(对象发送方,GridViewRowEventArgs e)
{
SqlConnection con=新的SqlConnection(strConnString);
con.Open();
对于(int i=0;i

如果这个gridview有两行,那么第一行将在数据库中存储两次。如果gridview有3行,则第一行存储三次。我如何解决这个问题?

解释:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        SqlConnection con = new SqlConnection(strConnString);  
        con.Open(); 

        string Users = e.Row.Cells[0].Text; // current row being bound

        string strQuery = "insert into Table1 (FileName, DateTimeUploaded, Type, Username)" + 
        " values(@FileName, @DateTimeUploaded, @Type, @Username)"; 
        SqlCommand cmd = new SqlCommand(strQuery); 

        cmd.Parameters.AddWithValue("@FileName", datalink); 
        cmd.Parameters.AddWithValue("@Type", ext); 
        cmd.Parameters.AddWithValue("@DateTimeUploaded", DateTime.Now); 
        cmd.Parameters.AddWithValue("@Username", Users); 

        cmd.CommandType = CommandType.Text; 
        cmd.Connection = con; 
        cmd.ExecuteNonQuery(); 

        con.Close(); 
        con.Dispose(); 
     }
 } 
您正在将数据插入GridView的
RowDataBound
事件中的数据库中-每次绑定DataRow时都会执行此操作!这一点,以及您每次使用以下命令循环访问每一行的事实:

 for (int i = 0; i < GridView1.Rows.Count; i++)  { // inserting record from each row }
您可能还希望只检查数据行,这样您的操作就不会发生在页脚/页眉行等上

新代码:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        SqlConnection con = new SqlConnection(strConnString);  
        con.Open(); 

        string Users = e.Row.Cells[0].Text; // current row being bound

        string strQuery = "insert into Table1 (FileName, DateTimeUploaded, Type, Username)" + 
        " values(@FileName, @DateTimeUploaded, @Type, @Username)"; 
        SqlCommand cmd = new SqlCommand(strQuery); 

        cmd.Parameters.AddWithValue("@FileName", datalink); 
        cmd.Parameters.AddWithValue("@Type", ext); 
        cmd.Parameters.AddWithValue("@DateTimeUploaded", DateTime.Now); 
        cmd.Parameters.AddWithValue("@Username", Users); 

        cmd.CommandType = CommandType.Text; 
        cmd.Connection = con; 
        cmd.ExecuteNonQuery(); 

        con.Close(); 
        con.Dispose(); 
     }
 } 

在执行更多操作之前,您可能需要搜索“.Net数据绑定”。您可能会发现一些可以为您做任何事情的东西……您应该检查代码中的“e.ItemType”。