2009-10-16 44 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() + "'"; 

这是否意味着你的用户定义的数据库实际上被命名为“数据库”? “数据库”这个词是一个保留字,这可能会导致你的悲伤。

相关问题