无效的对象名称,SQL异常。什么都没有修复它!

时间:2009-10-16 17:23:35

标签: c# 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:无效的对象名称:'word'。 在System.Data.SqlClient.SqlConnection.OnError(...

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 :(得分:2)

您的代码所在的位置

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

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