列名称异常无效

时间:2012-07-20 21:28:17

标签: sql-server ado.net

我试图在我的代码中获得一个简单的SQL语句,并得到一个DataTable,由于某种原因我得到了这个奇怪的异常:

  

列名无效

这是我的代码:

public DataTable GetAllVideoID(string stringId)
    {
        dt = new DataTable();
        dataObj = new DataObj();
        sql = "SELECT * FROM TBL_VIDEOS WHERE TBL_VIDEOS.ID=" + stringId;

        return dt = dataObj.SelectDataTable(sql);
    }

public DataTable SelectDataTable(string sql)
    {
        try
        {
            conn = new SqlConnection(conString);
            conn.Open();
            adapter = new SqlDataAdapter(sql, conn);

            dt = new DataTable();

            adapter.Fill(dt);



            return dt;
        }
        catch (Exception e)
        {

            throw e;
        }
        finally { conn.Close(); }

    }

当我在我的管理工具上运行它时,只有statemnet - 它完美运行。 所以我不知道..

我的数据库的结构: ID,标题,V_DESCIPTION,UPLOAD_DATE,V_VIEW,USERNAME,RATING,V_SOURCE,FLAG

谢谢:)

2 个答案:

答案 0 :(得分:4)

将您的sql更改为

sql = "SELECT * FROM TBL_VIDEOS WHERE TBL_VIDEOS.ID='" + stringId+"'";

可以解决这个问题。这将单引号括在stringId的值附近,例如.ID = '10'

如果stringId ='user',您的查询将变为

 sql = "SELECT * FROM TBL_VIDEOS WHERE TBL_VIDEOS.ID=user
 instead of
 sql = "SELECT * FROM TBL_VIDEOS WHERE TBL_VIDEOS.ID = 'user'

但是用户不是sql中的有效变量,因此您获得了无效的列名

答案 1 :(得分:0)

你的SelectDataTable方法绝对没问题。 我想到的唯一一件事就是取而代之:

sql = "SELECT * FROM TBL_VIDEOS WHERE TBL_VIDEOS.ID=" + stringId;

通过

sql = string.Format("SELECT * FROM TBL_VIDEOS WHERE TBL_VIDEOS.ID 
        = '{0}'", stringId);