2015-09-10 49 views
0

我做了程序,構建版本,並在我的電腦上工作很好,但是當我將它安裝在客戶端計算機上時,我得到了一些錯誤。我 最大的謎是這樣的代碼:兩臺電腦,相同的代碼,兩個結果(插入和更新)

if (!string.IsNullOrEmpty(textBox2.Text) && !string.IsNullOrEmpty(textBox6.Text)) 
     { 
      string komanda = ""; 
      con.Open(); 
      SqlDataAdapter sda = new SqlDataAdapter(); 
      SqlCommand cmd = new SqlCommand(); 

      string naziv = Convert.ToString(textBox2.Text); 
      string obim = Convert.ToString(textBox3.Text); 
      string format = Convert.ToString(textBox4.Text); 
      string isbn = Convert.ToString(textBox5.Text); 
      decimal cena = Convert.ToDecimal(textBox6.Text); 

      if (Izbor.Equals(1)) 
      { 
       komanda = "INSERT INTO Izdanja (Naziv, Obim, Format, ISBN, Cena) VALUES (N'" + naziv + "','" + obim + "','" + format + "','" + isbn + "','" + cena + "')"; 
      } 
      else if (Izbor.Equals(2)) 
      { 
       komanda = "UPDATE Izdanja SET Naziv = N'" + naziv + "', Obim ='" + obim + "', Format ='" + format + "', ISBN ='" + isbn + "', Cena ='" + cena + "' WHERE ID='" + textBox1.Text + "'"; 
      } 
      cmd.CommandText = komanda; 
      cmd.Connection = con; 
      cmd.ExecuteNonQuery(); 
      con.Close(); 
      ucitavanjeIzdanja(); 
      Izbor = 0; 
     } 
     else 
     { 
      MessageBox.Show("Fields must be filled!!!", "Warning!!!"); 
     } 

和謎是這樣的:我的電腦上的一切工作,在客戶端計算機上插入工作,但更新不。錯誤是:將數據類型varchar轉換爲數字時出錯。這怎麼可能?如果連接字符串錯誤 - 插入不起作用,但是插入工作,更新不行。如果代碼出現錯誤,它是如何在我的電腦上工作的?相同的代碼...

+0

也許你的電腦和客戶端的數據庫不同。 –

+0

不,相同的數據庫,正確的連接字符串... :( – user2710931

+5

你應該總是使用[參數化查詢](http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/ )。這種類型的字符串連接對於[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)攻擊是開放的。 –

回答

2

我不知道知道如果這是問題/正確的答案,但它太長的評論。

INSERT ing和UPDATE ing的值是否完全相同?如果不是,這可能畢竟與查詢類型無關。

例如,如果cena = 10,它可能都沒問題,但如果cena = 10.1m,那麼突然當前線程的文化很重要。這可能導致客戶端PC上的Cena = '10,1'

但你真的應該使用參數化查詢作爲SonerGönül提到的。

+0

是的,先生,這是答案。這太愚蠢了,我的賬戶可能會被阻止在這個網站上。非常感謝你。我對自己沒有檢查這麼小的事情很生氣。在我的比賽10.1,但在客戶端比賽是10,1,這是完全問題。再次謝謝你。我會很慚愧。 – user2710931

0

1使用的參數

這樣,你在你的代碼不是純粹的運氣

2個區域設置

你有VS客戶端機器的機器上的不同區域設置投擲數據類型的正確性負責。查看1並在將數據發送到SQL之前轉換數據。

爲了證明這一點,在兩臺機器上打印SQL字符串到某種日誌文件,並查看它們在兩臺機器上運行應用程序時的外觀。您甚至可以嘗試在SSMS中運行失敗的版本以查看失敗的版本。

+1

謝謝你的回答,這是正確的。 Evenhuis更快。我一定會聽取你的建議。 – user2710931

相關問題