将gridview中的单个选定行插入数据库ASP.net

时间:2013-05-20 20:44:21

标签: c# asp.net

我遇到了一个小问题,让我陷入困境。我正在使用连接到显示数据的数据源的gridview。我想要做的是将我想要的一行移到另一个表中。我现在拥有的代码,在点击上插入所有行而不是仅在选择的行中插入。这是我点击按钮的代码..

    protected void lbSelect_OnClick(object sender, EventArgs e)
    {

        conn.Open();
        tran = conn.BeginTransaction();
        cmd.Transaction = tran;
        //string slno = null;

        try
        {
            foreach (GridViewRow g1 in gvVehicleImport.Rows)
            {
                string StockNumber = (g1.FindControl("lblStockNumber") as Label).Text;
                string SalesPerson = (g1.FindControl("lblSalesPerson") as Label).Text;
                string Buyer = (g1.FindControl("lblBuyer") as Label).Text;
                string GrossProfit = (g1.FindControl("lblGrossProfit") as Label).Text;
                string DealDate = (g1.FindControl("lblDealDate") as Label).Text;
                string Make = (g1.FindControl("lblMake") as Label).Text;
                string Model = (g1.FindControl("lblModel") as Label).Text;
                string CarTruck = (g1.FindControl("lblCarTruck") as Label).Text;
                string NewUsed = (g1.FindControl("lblNewUsed") as Label).Text;
                string Lender = (g1.FindControl("lblLender") as Label).Text;
                string AmtFinanced = (g1.FindControl("lblAmtFinanced") as Label).Text;
                string RetailLease = (g1.FindControl("lblRetailLease") as Label).Text;
                string BankName = (g1.FindControl("lblBankName") as Label).Text;
                string Status = (g1.FindControl("lblStatus") as Label).Text;
                string ChangedBy = (g1.FindControl("lblChangedBy") as Label).Text;

                string query = "INSERT INTO Vehicle VALUES('" + StockNumber + "','" + SalesPerson + "','" + Buyer + "','" + GrossProfit + "','" + DealDate + "','" + Make + "','" + Model + "','" + CarTruck + "','" + NewUsed + "','" + Lender + "','" + AmtFinanced + "','" + RetailLease + "','" + BankName + "','" + Status + "','" + ChangedBy + "')";
                //slno = StockNumber;
                cmd.CommandText = query;
                cmd.ExecuteNonQuery();
            }


            tran.Commit();
            conn.Close();
            lblImportMessage.Text = "Row move successful.";


        }
        catch (Exception ex)
        {
            tran.Rollback();
            lblImportMessage.Text = "Row move was unsuccessful, " + ex.ToString();
        }

我正在调用插入到数据库中的标签,该标签运行良好,但它会插入每一行,而不仅仅是所选行。任何想法都会很棒!谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用GridView的SelectedRow属性 删除循环并使用类似的东西

GridViewRow g1 = gvVehicleImport.SelectedRow;
if(g1 != null)
{
   ... // code to insert
}

说,请删除ASAP构建您的Sql命令并使用parameterized query的字符串连接。这将允许您避免语法错误(当您的输入文本包含单引号时)和Sql Injection恶意用户试图破坏您的数据库

答案 1 :(得分:0)

我终于明白了。我不得不放弃我在模板中创建的onclick选择按钮,但并不是什么大不了的事。这是代码。

    protected void gvVehicleImport_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    {
        SqlConnection conn = new SqlConnection("Data Source=DataBase;Initial Catalog=DataBase;Integrated Security=True");
        conn.Open();

        string StockNumber;
        string SalesPerson;
        string Buyer;
        string GrossProfit;
        string DealDate;
        string Make;
        string Model;
        string CarTruck;
        string NewUsed;
        string Lender;
        string AmtFinanced;
        string RetailLease;
        string BankName;
        string Status;
        string ChangedBy;

        try
        {
            GridViewRow g1 = gvVehicleImport.Rows[e.NewSelectedIndex];


            //converts the labels of the gridview into strings
            StockNumber = (g1.FindControl("lblStockNumber") as Label).Text;
            SalesPerson = (g1.FindControl("lblSalesPerson") as Label).Text;
            Buyer = (g1.FindControl("lblBuyer") as Label).Text;
            GrossProfit = (g1.FindControl("lblGrossProfit") as Label).Text;
            DealDate = (g1.FindControl("lblDealDate") as Label).Text;
            Make = (g1.FindControl("lblMake") as Label).Text;
            Model = (g1.FindControl("lblModel") as Label).Text;
            CarTruck = (g1.FindControl("lblCarTruck") as Label).Text;
            NewUsed = (g1.FindControl("lblNewUsed") as Label).Text;
            Lender = (g1.FindControl("lblLender") as Label).Text;
            AmtFinanced = (g1.FindControl("lblAmtFinanced") as Label).Text;
            RetailLease = (g1.FindControl("lblRetailLease") as Label).Text;
            BankName = (g1.FindControl("lblBankName") as Label).Text;
            Status = (g1.FindControl("lblStatus") as Label).Text;
            ChangedBy = (g1.FindControl("lblChangedBy") as Label).Text;


            //inserts statement inserts above strings into table
            SqlCommand addImport = new SqlCommand("INSERT INTO Vehicle(v_StockNumber, v_SalesPerson, v_Buyer, v_GrossProfit, v_DealDate, v_Make, v_Model, v_CarTruck, v_NewUsed, v_Lender, v_AmtFinanced, v_RetailLease, v_BankName, v_Status, v_ChangedBy)"
            + "VALUES(@v_StockNumber, @v_SalesPerson, @v_Buyer, @v_GrossProfit, @v_DealDate, @v_Make, @v_Model, @v_CarTruck, @v_NewUsed, @v_Lender, @v_AmtFinanced, @v_RetailLease, @v_BankName, @v_Status, @v_ChangedBy)", conn);
            addImport.Parameters.AddWithValue("@v_StockNumber", StockNumber);
            addImport.Parameters.AddWithValue("@v_SalesPerson", SalesPerson);
            addImport.Parameters.AddWithValue("@v_Buyer", Buyer);
            addImport.Parameters.AddWithValue("@v_GrossProfit", GrossProfit);
            addImport.Parameters.AddWithValue("@v_DealDate", DealDate);
            addImport.Parameters.AddWithValue("@v_Make", Make);
            addImport.Parameters.AddWithValue("@v_Model", Model);
            addImport.Parameters.AddWithValue("@v_CarTruck", CarTruck);
            addImport.Parameters.AddWithValue("@v_NewUsed", NewUsed);
            addImport.Parameters.AddWithValue("@v_Lender", Lender);
            addImport.Parameters.AddWithValue("@v_AmtFinanced", AmtFinanced);
            addImport.Parameters.AddWithValue("@v_RetailLease", RetailLease);
            addImport.Parameters.AddWithValue("@v_BankName", BankName);
            addImport.Parameters.AddWithValue("@v_Status", Status);
            addImport.Parameters.AddWithValue("@v_ChangedBy", ChangedBy);

            //executes the import
            addImport.ExecuteNonQuery();
            //}

            //closes connection
            conn.Close();
            lblImportMessage.Text = "Row move successful.";


        }
        catch (Exception ex)
        {
            lblImportMessage.Text = "Row move was unsuccessful, " + ex.ToString();
        }
    }

我尝试了很多东西,很多都是为了插入没有数据的单行,但是这个似乎对我来说正常。希望这可以帮助其他遇到麻烦的人。 再次感谢!