首页 新闻 赞助 找找看

DataSet用视图读取不到数据

0
悬赏园豆:50 [待解决问题]
 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();
    }

把视图换成表就可以读取数据,请问以上代码有什么问题!为什么表换成视图就不行了呢?新手求解答

问题补充:

有没有大师看到啊

啃着大葱杀鬼子的主页 啃着大葱杀鬼子 | 初学一级 | 园豆:13
提问于:2015-03-31 18:13
< >
分享
所有回答(3)
0

this.GridView1.DataSource = ds;

this.GridView1.DataMember = "vi_report";

.NET代码应该这样写。

至于你说的取视图没数据,取表就有,指的是sql语句方面吗?这个好简单啊,直接把你的sql语句弄到sql server里运行,看是否有结果。

 

如果你的视图查询条件本身就有问题,那怎么能指望有数据呢?

519740105 | 园豆:5810 (大侠五级) | 2015-03-31 20:14

视图查询条件在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";

 

支持(0) 反对(0) 啃着大葱杀鬼子 | 园豆:13 (初学一级) | 2015-03-31 20:31

@啃着大葱杀鬼子: 我的代码只是一个示范。

1、dataset是一个表集合,单独给datasource是不好的,你这里因为只有一个表,所以问题不大。

2、配置数据源的方法很多,但一定要确定。

 

首先是要确定你的问题是来自.NET还是SQL语句。

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2015-03-31 21:32
0

打断点调试,一步步来撒

小小高 | 园豆:1095 (小虾三级) | 2015-04-02 09:12
0

若大一个互联网怎么只找到你一个人碰到跟我一样的问题。

我昨天也设计了一个access表格,里面有几个视图,然后用vs2005的date去链接这几个视图。结果就算用select *都查不到数据,链接表格却一点问题都没有,我都快奔溃了。然后上网查问题所在也只有你一个人提出这样的问题,再找不到第二个出问题的人了。

我已经放弃了,于是我就准备把视图里面的查询语句直接复制到commandText里面去。结果一运行,发现也是空表。这下我就感觉很奇怪了,因为同样的语句在Access里面运行很正确的。我仔细检查commandText发现里面有 (where 目标字段 like “*检索文本*”)这样的语句,我就尝试把*换成%。在commandText就运行正常了。

我回头去修改视图,把视图里面的“*检索文本*”换成“%检索文本%”结果在Access里面的查询结果是空,而在应用程序里面就运行正常了。

说明原因出在OLEDB和ACCESS使用了完全不同的通配符。

你检查一下你的视图是不是有使用了相互冲突的通配符。

伊僻古寨 | 园豆:202 (菜鸟二级) | 2015-10-28 10:41
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册