2009-10-16 43 views
0

所以,我一直在試圖解決這個問題約兩個月。這一切都是在我的「開發」機器投入使用時開始的,我將它安裝在我的筆記本電腦上。它在我的舊電腦上工作很有趣,但它在我的新電腦上無法使用,從來沒有在筆記本電腦上使用過。無效的對象名稱,SQL異常。沒有什麼修復它!

我構建了SQL Server,就像我記得的第一個那樣,但它開始給我SQLExceptions。我搜索了它,我在這裏搜索了它,我嘗試了不同的解決方案。沒有。

我會發布有問題的代碼,我希望有人能夠幫助我看到我的缺陷。我相信這是愚蠢的。

SqlCommand sc = sqlc.CreateCommand(); 
       sc.CommandText = "SELECT pNumber FROM database WHERE pNumber = '" + Number.ToString() + "'"; 
       SqlDataReader sdr = sc.ExecuteReader(); 
       if (sdr.Read().ToString() != null) 
       { 
        sdr.Close(); 
        sc.CommandText = "UPDATE word SET word = '" + Word + "' WHERE pNumber = '" + Number.ToString() + "'"; 
        HERE IS WHERE THE ERROR OCCURS----> sc.ExecuteReader(); 
       } 
       else 
       { 
        sdr.Close(); 
        sc.CommandText = "INSERT INTO database VALUES(" + Number.ToString() + ",'" + Word + "',0, 0, 0)"; 
        sc.ExecuteNonQuery(); 
        sc.CommandText = "SELECT * FROM database WHERE pNumber = '" + Number.ToString() + "'"; 
        SqlDataReader dataRead = sc.ExecuteReader(); 
        for (int x = 0; x < 6; ++x) 
        { 
         User[x] = dataRead.GetString(x); 
        } 
       } 
       sqlc.Close(); 

編輯:SqlException:無效的對象名稱:'單詞'。 在System.Data.SqlClient.SqlConnection.OnError(...

+2

**哪裏**和**你有什麼**異常?你是通過代碼來完成的嗎?什麼是問題線? – 2009-10-16 17:27:08

+1

請發佈你得到的例外的文字。此外,請嘗試構建您嘗試執行的SQL,在SQL Workbench中手動執行它,並查看您獲得的結果。 – 2009-10-16 17:28:45

+0

哈哈。對不起馬克,當我說120號線時我並沒有想。:3 – Mashew 2009-10-16 17:29:35

回答

5
sc.CommandText = "UPDATE word SET word = '" + Word + "' WHERE pNumber = '" + Number.ToString() + "'"; 

也許應該讀

sc.CommandText = "UPDATE database SET word = '" + Word + "' WHERE pNumber = '" + Number.ToString() + "'"; 

我改變了SQL查詢中的表名,就是這樣。

+2

你打我吧:) – 2009-10-16 17:29:49

+0

邁克爾在評論中說過,但是,當我從邁克爾說的時候發現它的時候,你說得對。傻我。 我每次發帖,這是我的一個愚蠢的錯誤。 – Mashew 2009-10-16 17:32:45

6

更改您的輸入值參數,它是更安全,如果它是意外造成SQL注入的問題可能會解決您的問題。

http://www.csharp-station.com/Tutorials/AdoDotNet/Lesson06.aspx

像這樣:

sc.CommandText = "INSERT INTO database VALUES(@number,@word,0, 0, 0)"; 
sc.Parameters.Add("@number", SqlType.Int).Value = number; 
sc.Parameters.Add("@word", SqlType.Int).Value = Word 
+0

我會......最終。 :3 – Mashew 2009-10-16 17:33:22

2

如果你的代碼讀取

sc.CommandText = "SELECT pNumber FROM database WHERE pNumber = '" + Number.ToString() + "'"; 

這是否意味着你的用戶定義的數據庫實際上被命名爲「數據庫」? 「數據庫」這個詞是一個保留字,這可能會導致你的悲傷。

相關問題