protected void Button1_Click(object sender, EventArgs e) { SqlConnection tcon = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]); tcon.Open(); string sql = "select top 10 creat_dt,bod_cd,bod_id from vi_report "; sql = sql + "where bod_cd like '%" + bodcd.Text + "%' and bod_type_id=2 and bod_status_id=1"; DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(sql, tcon); da.Fill(ds, "vi_report"); this.GridView1.DataSource = ds; this.GridView1.DataBind(); tcon.Close(); }
把视图换成表就可以读取数据,请问以上代码有什么问题!为什么表换成视图就不行了呢?新手求解答
有没有大师看到啊
this.GridView1.DataSource = ds;
this.GridView1.DataMember = "vi_report";
.NET代码应该这样写。
至于你说的取视图没数据,取表就有,指的是sql语句方面吗?这个好简单啊,直接把你的sql语句弄到sql server里运行,看是否有结果。
如果你的视图查询条件本身就有问题,那怎么能指望有数据呢?
视图查询条件在SQL里面执行有数据,根据你写的,加上了一行
this.GridView1.DataMember = "vi_report";
但是运行结果出错了
“/”应用程序中的服务器错误。 未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。 说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.ConstraintException: 未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。 源错误: 行 22: DataSet ds = new DataSet(); 行 23: SqlDataAdapter da = new SqlDataAdapter(sql, tcon); 行 24: da.Fill(ds, "vi_report"); 行 25: this.GridView1.DataSource = ds; 行 26: this.GridView1.DataMember = "vi_report";
@啃着大葱杀鬼子: 我的代码只是一个示范。
1、dataset是一个表集合,单独给datasource是不好的,你这里因为只有一个表,所以问题不大。
2、配置数据源的方法很多,但一定要确定。
首先是要确定你的问题是来自.NET还是SQL语句。
打断点调试,一步步来撒
若大一个互联网怎么只找到你一个人碰到跟我一样的问题。
我昨天也设计了一个access表格,里面有几个视图,然后用vs2005的date去链接这几个视图。结果就算用select *都查不到数据,链接表格却一点问题都没有,我都快奔溃了。然后上网查问题所在也只有你一个人提出这样的问题,再找不到第二个出问题的人了。
我已经放弃了,于是我就准备把视图里面的查询语句直接复制到commandText里面去。结果一运行,发现也是空表。这下我就感觉很奇怪了,因为同样的语句在Access里面运行很正确的。我仔细检查commandText发现里面有 (where 目标字段 like “*检索文本*”)这样的语句,我就尝试把*换成%。在commandText就运行正常了。
我回头去修改视图,把视图里面的“*检索文本*”换成“%检索文本%”结果在Access里面的查询结果是空,而在应用程序里面就运行正常了。
说明原因出在OLEDB和ACCESS使用了完全不同的通配符。
你检查一下你的视图是不是有使用了相互冲突的通配符。