2012-10-27 44 views
0

我有一個鏈接按鈕在我的GridView中,我有一些插入表中的值,但它沒有插入,但在調試模式下查詢數據時,當我測試SQL Server上它插入有啥問題數據沒有在c#中插入,但在SQL Server查詢瀏覽器中插入相同的數據

protected void gvPO_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
     if (e.CommandName == "Select") 
     { 
      c.GetConection(); 
      SqlCommand cmd = new SqlCommand("delete from tmpMateIN", c.con); 
      cmd.ExecuteNonQuery(); 
      DataTable dt; 

      int index = Convert.ToInt32(e.CommandArgument); 
      gvPO.SelectedIndex = index; 

      if (Convert.ToInt16(gvPO.SelectedIndex) < 0) 
      { 
       lblMsg.Text = "Please Select Code !"; 
       return; 
      } 

      dt = oAccount.GetPO((int)Session["CompCode"], 79, Convert.ToInt16(((LinkButton)gvPO.Rows[gvPO.SelectedIndex].Cells[0].FindControl("lnkCode")).Text.ToString())); 

      for (int i = 0; i < dt.Rows.Count; i++) 
      { 
       String s6 = "insert into tmpMateIN(compcode ,msttype ,mstcode,mstdate ,mstchno ,mstblno ,mstbldt ,mstcust ,itdsrno , itditem ,itdquan ,itdrema ,itemname ,acctname ,ItmSize , unitname ,itemsize ,chno , chdt ,godown, packsize ,itdRate , itdDisc , itdAmou , mstInvNo , mstOrdNo,mstInvDt ,mstOrdDt ,mstrema , mstexcDes , msttaxDes ,msttaxper , mstfrghtDes , mstfrghtper , mstdeliDes ,mstpayDes , mstvaliDes, mstqno, mstqdt , itdthickness , itdlength ,itdwidth ,itdweight, itdtowt , acctaddr , custemail , mstpayMode , mstdepa,itdrefq,itdorgq)values(" + (int)Session["CompCode"] + ",79,'" + dt.Rows[i]["mstcode"] + "','" + dt.Rows[i]["mstdate"] + "'," + dt.Rows[i]["mstchno"] + ",'" + dt.Rows[i]["mstchno"] + "','" + dt.Rows[i]["mstdate"] + "','" + dt.Rows[i]["mstptcode"] + "','" + (i + 1) + "','" + dt.Rows[i]["itditem"] + "','" + dt.Rows[i]["itdquan"] + "','" + dt.Rows[i]["itdrema"] + "','" + dt.Rows[i]["itdnarr"] + "','" + dt.Rows[i]["AcctName"] + "','" + dt.Rows[i]["itdnarr"] + "','" + dt.Rows[i]["UnitName"] + "' ,'" + dt.Rows[i]["itdunit"] + "','','" + dt.Rows[i]["mstdate"] + "','',''," + dt.Rows[i]["itdRate"] + "," + dt.Rows[i]["itdamou"] + " ," + dt.Rows[i]["itdAmou"] + ",'" + dt.Rows[i]["mstInvNo"] + "','" + dt.Rows[i]["mstindno"] + "','" + dt.Rows[i]["mstdate"] + "','" + dt.Rows[i]["mstdate"] + "','" + dt.Rows[i]["mstrema"] + "','','','" + dt.Rows[i]["mstTaxPer"] + "','" + dt.Rows[i]["mstfrghtDes"] + "','" + dt.Rows[i]["mstfrghtper"] + "','" + dt.Rows[i]["mstdeliDes"] + "','" + dt.Rows[i]["mstpayDes"] + "','" + dt.Rows[i]["mstvaliDes"] + "','" + dt.Rows[i]["mstqno"] + "','" + dt.Rows[i]["mstpodate"] + "','" + dt.Rows[i]["itdthickness"] + "','" + dt.Rows[i]["itdsource"] + "','" + dt.Rows[i]["itddestin"] + "','" + dt.Rows[i]["itdweight"] + "','" + dt.Rows[i]["itdtowt"] + "','','" + dt.Rows[i]["acctaddr"] + "','" + dt.Rows[i]["mstpayMode"] + "','" + dt.Rows[i]["mstContactPerson"] + "','" + dt.Rows[i]["mstlotno"] + "','" + dt.Rows[i]["mstsection"] + "')"; 

       SqlCommand cmd1 = new SqlCommand(s6, c.con); 
       cmd1.ExecuteNonQuery(); 
      } 

      c.CloseConnection(); 
      Response.Redirect("Poreport.aspx"); 
    } 
}  
+1

** **明顯的問題是,你** **開放**到SQL注入攻擊,只需連接你的SQL查詢 - **不要這樣做! EVER!**使用**參數化查詢**來代替以避免此問題 - 而且這些問題也更快 –

+0

@marc_s是正確的 - 只是爲了增加更多的權重以防一個聲音不夠用:您目前正在做的是**非常非常錯誤**。它不僅不能正確地處理有效的數據,而且還是一個巨大的安全風險。請閱讀關於參數化的內容。 –

回答

1

可以運行SQL Server Profiler,看是否呼叫在你的程序的執行時間,以SQL服務器所進行插入。

建議:你爲什麼不使用存儲過程而不是這個聯查詢這樣的:

var dr = dt.Rows[i]; 
SqlCommand cmd1 = new SqlCommand(s6, c.con); 
cmd1.CommandType = System.Data.CommandType.StoredProcedure; 
cmd1.CommandText = "tmpMateIN_Insert"; 
cmd1.Parameters.Add(new SqlParameter("@compcode", (int)Session["CompCode"]); 
cmd1.Parameters.Add(new SqlParameter("@msttype", 79); 
cmd1.Parameters.Add(new SqlParameter("@mstcode", dr["mstcode"]); 
cmd1.Parameters.Add(new SqlParameter("@mstdate", dr["mstdate"]); 
// ... 
cmd1.ExecuteNonQuery(); 

新增:
或者,如果你真的想堅持一個內聯查詢那麼優選的方法是使用參數化內聯查詢,如下所示:

String s6 = "insert into tmpMateIN(compcode, msttype, mstcode, mstdate, ..." + 
    "values(@compcode, @msttype, @mstcode, @mstdate, ..."; 

cmd1.Parameters.Add(new SqlParameter("@compcode", (int)Session["CompCode"]); 
cmd1.Parameters.Add(new SqlParameter("@msttype", 79); 
cmd1.Parameters.Add(new SqlParameter("@mstcode", dr["mstcode"]); 
cmd1.Parameters.Add(new SqlParameter("@mstdate", dr["mstdate"]); 
// ... 
cmd1.ExecuteNonQuery(); 
+1

沒有真正的理由選擇存儲過程 - 參數化的文本命令解決了相同的問題,沒有維護問題。 –

+0

這一切都歸功於所有人 – iProgrammer

相關問題