SQL行更新无法在C#中工作

时间:2014-08-04 01:12:57

标签: c# mysql sql asp.net

我无法弄清楚为什么下面的代码没有更新我的GridView和我的MySQL数据库。任何人都可以向我提供一些关于我可能做错了什么的提示吗?

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {

        connection();

        GridViewRow row = GridView1.Rows[e.RowIndex];
        Label lblID = (Label)row.FindControl("lblID");
        TextBox textName = (TextBox)row.Cells[3].Controls[0];
        TextBox textadd = (TextBox)row.Cells[4].Controls[0];
        TextBox textc = (TextBox)row.Cells[5].Controls[0];

        String query = "update employeeDB set [First Name:]='" + textName.Text + "', [Last Name:]='" + textadd.Text + "', [Email:]='" + textc.Text + "' where id='" + lblID + 1 + "'";

        SqlCommand com = new SqlCommand(query, con);        

        SqlDataReader dr;
        dr = com.ExecuteReader();

        GridView1.EditIndex = -1;

        bind();
    }

这是我要求的绑定方法:

private void bind()
{
    connection();
    string query = "select * from employeeDB where [Last Name:] like'" + TextBox1.Text + "%'";

    SqlDataAdapter da = new SqlDataAdapter(query, con);
    DataSet ds = new DataSet();
    da.Fill(ds);
    GridView1.DataSource = ds;
    GridView1.DataBind();
}

4 个答案:

答案 0 :(得分:3)

替换

dr = com.ExecuteReader();

com.ExecuteNonQuery();

ExecuteReader适用于SELECT次查询。

此外,在实际应用程序中,您不应该像您一样构建sql字符串。使用SqlParameter来避免sql注入和许多其他错误。

答案 1 :(得分:1)

GridViewRow row = GridView1.Rows[e.RowIndex];
            Label lblID = (Label)row.FindControl("lblID");
            TextBox textName = (TextBox)row.Cells[3].Controls[0];
            TextBox textadd = (TextBox)row.Cells[4].Controls[0];
            TextBox textc = (TextBox)row.Cells[5].Controls[0];

            /*are you sure column names are like [First Name:],[Last Name:] and [Email:] in the table*/
            /*Syntax for update command should be like this "UPDATE TableName SET ColumnName1=@Parameter1, ColumnName2=@Parameter2 ....
             * WHERE ColumnName=@ParameterName"
             */
            String query = "update employeeDB set [First Name:]=@FirstName, [Last Name:]=@LastName, [Email:]=@Email where id=@id";

            SqlCommand com = new SqlCommand(query, con);
            com.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = textName.Text;
            com.Parameters.Add("@LastName", SqlDbType.VarChar).Value = textadd.Text;
            com.Parameters.Add("@Email", SqlDbType.VarChar).Value = textc.Text;
            com.Parameters.Add("@id", SqlDbType.Int).Value = Convert.ToInt32(lblID.Text) + 1;
            con.Open();
            com.ExecuteNonQuery();
            con.Close();

            GridView1.EditIndex = -1;
            bind();
        }

答案 2 :(得分:0)

你应该做这样的事情

//从会话对象中检索表。     DataTable dt =(DataTable)Session [“TaskTable”];

//Update the values.
GridViewRow row = TaskGridView.Rows[e.RowIndex];
dt.Rows[row.DataItemIndex]["Id"] = ((TextBox)(row.Cells[1].Controls[0])).Text;
dt.Rows[row.DataItemIndex]["Description"] = ((TextBox)(row.Cells[2].Controls[0])).Text;
dt.Rows[row.DataItemIndex]["IsComplete"] = ((CheckBox)(row.Cells[3].Controls[0])).Checked;

//Reset the edit index.
TaskGridView.EditIndex = -1;

//Bind data to the GridView control.
BindData();

答案 3 :(得分:0)

你现在得到了什么?例外或只是没有错误,什么也没发生?要检查的是数据库连接字符串 - 确保您的连接字符串指向您要定位的数据库。第二,我想指出查询是开放的sql注入攻击(你需要考虑的事情 - 如果你打算将它用于生产代码)。第三,你在bind方法中有什么?它试图绑定什么数据源以及具有什么控制权?从示例代码本身看,似乎没有从db返回数据。

更新时间: 顺便问一下,你的查询中是否应该有冒号?例如,参见名字后面的冒号([名字:])字符串查询="更新employeeDB集[名字:] ='" + textName.Text +"',[姓氏:] ='" + textadd.Text +"',[Email:] ='" + textc.Text +"'其中id ='" + lblID + 1 +"'&#34 ;;