从asp.net中的表中删除已检查的记录

时间:2014-04-28 13:30:05

标签: c# asp.net sql-server

我无法识别我的代码中出错的地方。有人可以帮忙吗?我想删除使用c#检查的所有图像。

我的代码段如下所示: -

SqlConnection con = new            
SqlConnection(WebConfigurationManager.ConnectionStrings["constring"].ConnectionString);
SqlDataAdapter adap;
DataSet ds;
string Query;
protected void Page_Load(object sender, EventArgs e)
{

    if (!Page.IsPostBack)
    {

        binddata();

    }
}

protected void binddata()
{

    string str = "select * from photos";
    SqlCommand cmd = new SqlCommand(str, con);

    adap = new SqlDataAdapter(str, con);
    ds = new DataSet();
    adap.Fill(ds);
    Repeater1.DataSource = ds;
    Repeater1.DataBind();
}

protected void LinkButton1_Click(object sender, EventArgs e)
{

con.Open();
String mySQL;


try
{

    for (int i = 0; i < Repeater1.Items.Count; i++)
    {
        CheckBox CheckBox1 = (CheckBox)
        Repeater1.Items[i].FindControl("CheckBox1");
        if (((CheckBox)Repeater1.Items[i].FindControl("CheckBox1")).Checked)
        {

            //This assumes data type of messageID is integer, change (int) to the right type
            CheckBox CheckBox = (CheckBox)Repeater1.Items[i].FindControl("CheckBox1");
            Literal litMessageId = (Literal)Repeater1.Items[i].FindControl("literal1");

            string Id = litMessageId.Text;
            mySQL = string.Format("delete from photos where id = '{0}'", Id);

            SqlCommand cmdDelete = new SqlCommand(mySQL, con);
            cmdDelete.ExecuteNonQuery();




            // Continue your code here
        }
        else
        {

        }
    }


}
    catch
{
    Label2.Text = "errror";
}

}

.aspx页面包含: -

<asp:Repeater ID="Repeater1" runat="server">
        <ItemTemplate>
        <asp:CheckBox ID="CheckBox1" runat="server" />
         <img src='images/<%#DataBinder.Eval(Container.DataItem,"images") %>' height="150" width="150" alt="" border="0" />
            <asp:Literal ID="Literal1" runat="server"></asp:Literal>

           </br>
        </ItemTemplate>


        </asp:Repeater>

提前致谢:)

1 个答案:

答案 0 :(得分:0)

以下是一些提示:

您使用的名称在您的代码隐藏中很难理解。您现在有1个中继器,但如果您有多个中继器,最好使用更具体的名称。

根据.NET版本,您可以使用泛型类型来声明变量。

SqlCommand cmd = new SqlCommand(str, con); 

变为:

var sqlCommand = new SqlCommand(queryString, connectionString);

您没有关闭连接。如果您在较新版本的.NET中,我认为最佳方法是:

private string ConnectionString  = webConfigurationManager.ConnectionStrings["connectionstring"] != null ? WebConfigurationManager.ConnectionStrings["connectionstring"].ConnectionString : "";

if (!string.IsNullOrEmpty(this.ConnectionString))
{
using (var sqlConnection = new SqlConnection(this.ConnectionString))
{
    //your code here
}
}

您正在捕捉错误,但您没有对提供的信息做任何事情。

使用:

Catch (Exception exception)
{
    ErrorLabel.Text = string.format("The following error has occurred: {0}.", exception.Message);
}

在需要的地方使用exception.Message。

在现代实现中,最好使用EntityFramework和MVC Razor来使用MVC应用程序。

定义这样的SQL查询也很危险。如果我将文字的帖子值编辑为“ID AND 1 = 1”,我现在将删除所有照片。

以下是一些帮助您开始使用Entityframework和MVC的页面:

http://www.asp.net/mvc/tutorials

http://www.codeproject.com/Articles/363040/An-Introduction-to-Entity-Framework-for-Absolute-B

我会在一分钟内给你一些改进的好点。首先尝试这个并将文字值更改为您用作id的列,以防我错了:

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
    <asp:CheckBox ID="CheckBox1" runat="server" />
    <img src='images/<%#DataBinder.Eval(Container.DataItem,"images") %>' height="150" width="150" alt="" border="0" />
    <asp:Literal ID="Literal1" runat="server" Value='<%#DataBinder.Eval(Container.DataItem,"id") %>'></asp:Literal>
    </br>
    </ItemTemplate>
</asp:Repeater>



SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["constring"].ConnectionString);
SqlDataAdapter adap;
DataSet ds;
string Query;
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        binddata();
    }
}

protected void binddata()
{
    string str = "select * from photos";
    SqlCommand cmd = new SqlCommand(str, con);

    adap = new SqlDataAdapter(str, con);
    ds = new DataSet();
    adap.Fill(ds);
    Repeater1.DataSource = ds;
    Repeater1.DataBind();
}

protected void LinkButton1_Click(object sender, EventArgs e)
{
    con.Open();
    String mySQL;
    try
    {
        for (int i = 0; i < Repeater1.Items.Count; i++)
        {
            CheckBox CheckBox1 = (CheckBox)Repeater1.Items[i].FindControl("CheckBox1")
            Literal litMessageId = (Literal)Repeater1.Items[i].FindControl("literal1");

            if (CheckBox1 != null && litMessageId != null && CheckBox1.Checked)
            {
                string Id = litMessageId.Text;
                mySQL = string.Format("delete from photos where id = '{0}'", Id);

                SqlCommand cmdDelete = new SqlCommand(mySQL, con);
                cmdDelete.ExecuteNonQuery();

                // Continue your code here
            }
            else
            {

            }
        }
    }
    catch
    {
        Label2.Text = "error";
    }
}