2013-10-27 232 views
-3

來源:附近有語法錯誤錯誤

for (int i = 0; i < dtExcel.Rows.Count; i++) 
{ 
    string bn = "select * from Planilha where ROTA=" + dtExcel.Rows[i][0]; 
    SqlCommand Queryyy = new SqlCommand(bn, conexao); 
    SqlDataReader drr; 
    drr = Queryyy.ExecuteReader(); 
    if (drr.Read() == true) 
    { 
     try 
     { 
      SqlCommand cmd = new SqlCommand("UPDATE Planilha SET LOJA ='" + dtExcel.Rows[i][1] + "' where ROTA = " + dtExcel.Rows[i][0] + ")", conexao); 
      cmd.ExecuteNonQuery(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Erro1 " + ex.Message); 
     } 
    } 

來尋找dtExcel.Rows[i][0]不發送更新


string cmdText = "insert into Planilha3 (ROTALOJ,....) values(@[email protected],@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10,@p11,@p12,@p13,@p14,@p15,@p16,@p17,@p18,@p19,@p20,@p21,@p22,@p23,@p24,@p25,@p26,@p27,@p28,@p29,@p30,@p31,@p32,@p33,@p34,@p35,@p36,@p37,@p38,@p39,@p40,@p41,@p42,@p43,@p44,@p45,@p46,@p47,@48,@p49,@50,@51,@52,@53,@54,@55,@56,@57,@58,@p59,@p60,@p61,@p62)"; 
         SqlCommand cmd = new SqlCommand(cmdText, conexao); 
         cmd.Parameters.AddWithValue("@p0", dtExcel.Rows[i][0]); 
         cmd.Parameters.AddWithValue("@p1", dtExcel.Rows[i][1]); 
         cmd.Parameters.AddWithValue("@p2", dtExcel.Rows[i][2]); 
         cmd.Parameters.AddWithValue("@p3", dtExcel.Rows[i][3]); 
         cmd.Parameters.AddWithValue("@p4", dtExcel.Rows[i][4]); 
         cmd.Parameters.AddWithValue("@p5", dtExcel.Rows[i][5]); 
         cmd.Parameters.AddWithValue("@p6", dtExcel.Rows[i][6]); 
         cmd.Parameters.AddWithValue("@p7", dtExcel.Rows[i][7]); 
         cmd.Parameters.AddWithValue("@p8", dtExcel.Rows[i][8]); 
         cmd.Parameters.AddWithValue("@p9", dtExcel.Rows[i][9]); 
         cmd.Parameters.AddWithValue("@p10", dtExcel.Rows[i][10]); 
         cmd.Parameters.AddWithValue("@p11", dtExcel.Rows[i][11]); 
         cmd.Parameters.AddWithValue("@p12", dtExcel.Rows[i][12]); 
         cmd.Parameters.AddWithValue("@p13", dtExcel.Rows[i][13]); 
         cmd.Parameters.AddWithValue("@p14", dtExcel.Rows[i][14]); 
         cmd.Parameters.AddWithValue("@p15", dtExcel.Rows[i][15]); 
         cmd.Parameters.AddWithValue("@p16", dtExcel.Rows[i][16]); 
         cmd.Parameters.AddWithValue("@p17", dtExcel.Rows[i][17]); 
         cmd.Parameters.AddWithValue("@p18", dtExcel.Rows[i][18]); 
         cmd.Parameters.AddWithValue("@p19", dtExcel.Rows[i][19]); 
         cmd.Parameters.AddWithValue("@p20", dtExcel.Rows[i][20]); 
         cmd.Parameters.AddWithValue("@p21", dtExcel.Rows[i][21]); 
         cmd.Parameters.AddWithValue("@p22", dtExcel.Rows[i][22]); 
         cmd.Parameters.AddWithValue("@p23", dtExcel.Rows[i][23]); 
         cmd.Parameters.AddWithValue("@p24", dtExcel.Rows[i][24]); 
         cmd.Parameters.AddWithValue("@p25", dtExcel.Rows[i][25]); 
         cmd.Parameters.AddWithValue("@p26", dtExcel.Rows[i][26]); 
         cmd.Parameters.AddWithValue("@p27", dtExcel.Rows[i][27]); 
         cmd.Parameters.AddWithValue("@p28", dtExcel.Rows[i][28]); 
         cmd.Parameters.AddWithValue("@p29", dtExcel.Rows[i][29]); 
         cmd.Parameters.AddWithValue("@p30", dtExcel.Rows[i][30]); 
         cmd.Parameters.AddWithValue("@p31", dtExcel.Rows[i][31]); 
         cmd.Parameters.AddWithValue("@p32", dtExcel.Rows[i][32]); 
         cmd.Parameters.AddWithValue("@p33", dtExcel.Rows[i][33]); 
         cmd.Parameters.AddWithValue("@p34", dtExcel.Rows[i][34]); 
         cmd.Parameters.AddWithValue("@p35", dtExcel.Rows[i][35]); 
         cmd.Parameters.AddWithValue("@p36", dtExcel.Rows[i][36]); 
         cmd.Parameters.AddWithValue("@p37", dtExcel.Rows[i][37]); 
         cmd.Parameters.AddWithValue("@p38", dtExcel.Rows[i][38]); 
         cmd.Parameters.AddWithValue("@p39", dtExcel.Rows[i][39]); 
         cmd.Parameters.AddWithValue("@p40", dtExcel.Rows[i][40]); 
         cmd.Parameters.AddWithValue("@p41", dtExcel.Rows[i][41]); 
         cmd.Parameters.AddWithValue("@p42", dtExcel.Rows[i][42]); 
         cmd.Parameters.AddWithValue("@p43", dtExcel.Rows[i][43]); 
         cmd.Parameters.AddWithValue("@p44", dtExcel.Rows[i][44]); 
         cmd.Parameters.AddWithValue("@p45", dtExcel.Rows[i][45]); 
         cmd.Parameters.AddWithValue("@p46", dtExcel.Rows[i][46]); 
         cmd.Parameters.AddWithValue("@p47", dtExcel.Rows[i][47]); 
         cmd.Parameters.AddWithValue("@p48", dtExcel.Rows[i][48]); 
         cmd.Parameters.AddWithValue("@p49", dtExcel.Rows[i][49]); 
         cmd.Parameters.AddWithValue("@p50", dtExcel.Rows[i][50]); 
         cmd.Parameters.AddWithValue("@p51", dtExcel.Rows[i][51]); 
         cmd.Parameters.AddWithValue("@p52", dtExcel.Rows[i][52]); 
         cmd.Parameters.AddWithValue("@p53", dtExcel.Rows[i][53]); 
         cmd.Parameters.AddWithValue("@p54", dtExcel.Rows[i][54]); 
         cmd.Parameters.AddWithValue("@p55", dtExcel.Rows[i][55]); 
         cmd.Parameters.AddWithValue("@p56", dtExcel.Rows[i][56]); 
         cmd.Parameters.AddWithValue("@p57", dtExcel.Rows[i][57]); 
         cmd.Parameters.AddWithValue("@p58", dtExcel.Rows[i][58]); 
         cmd.Parameters.AddWithValue("@p59", dtExcel.Rows[i][59]); 
         cmd.Parameters.AddWithValue("@p60", dtExcel.Rows[i][60]); 
         cmd.Parameters.AddWithValue("@p61", dtExcel.Rows[i][61]); 
         cmd.Parameters.AddWithValue("@p62", dtExcel.Rows[i][62]); 
         cmd.Parameters.AddWithValue("@p63", dtExcel.Rows[i][63]); 
         cmd.ExecuteNonQuery(); 

        } 
        catch (Exception ex) 
        { 
         MessageBox.Show("Erro2 " + ex.Message); 
         continue; 
        } 

enter image description here

現在給這個錯誤

+0

什麼是'dtExcel'?以及'dtExcel.Rows'的類型是什麼? – sgarizvi

+0

什麼是'dtExcel.Rows [i] [0]'恰好在您調試代碼時?請使用[參數化查詢](http://www.codinghorror.com/blog/2005/04/give-me-parameterized-sql-or-give-me-death.html)。 –

回答

0

我F I讀你的代碼正確,語法錯誤是由接近parenthesys在更新查詢

SqlCommand cmd = new SqlCommand("UPDATE Planilha SET LOJA ='" + dtExcel.Rows[i][1] + 
        "' where ROTA = " + dtExcel.Rows[i][0] , conexao); 
                 ^^^ removed 

然而這段代碼是真正要求煩惱的結束而引起的。

您需要開始使用參數化查詢,以避免在輸入文本中出現一個或多個打破字符串連接的單引號時可能出現的語法錯誤。
而且,更重要的是,要避免SQL注入

因此,舉例來說,內更新代碼變得

string cmdText = "UPDATE Planilha SET LOJA [email protected] where ROTA = @p2"; 
SqlCommand cmd = new SqlCommand(cmdText, conexao); 
cmd.Parameters.AddWithValue("@p1", dtExcel.Rows[i][1]); 
cmd.Parameters.AddWithValue("@p2", dtExcel.Rows[i][0].ToString()); 
cmd.ExecuteNonQuery(); 

而第一查詢變得

string bn = "select * from Planilha where [email protected]"; 
SqlCommand Queryyy = new SqlCommand(bn, conexao); 
Queryyy.Parameters.AddWithValue("@p1", dtExcel.Rows[i][0]); 
.... 

在這一點上有剛要解決的問題。 ROTA列的數據類型是什麼?
如果它是一個數字類型,那麼你需要將從dtExcel獲得的值轉換爲數值。

例如,在整數的情況下

Queryyy.Parameters.AddWithValue("@p1", Convert.ToInt32(dtExcel.Rows[i][0]));