我试图在我的代码中获得一个简单的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
谢谢:)
答案 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);