首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

"未能启用约束,一行或多行中包含违反非空,唯一或者外键约束的值 "报表中查询视图时出错解决方法

2012-06-17 
未能启用约束,一行或多行中包含违反非空,唯一或者外键约束的值 报表中查询视图时出错未能启用约束,一行

"未能启用约束,一行或多行中包含违反非空,唯一或者外键约束的值 "报表中查询视图时出错
"未能启用约束,一行或多行中包含违反非空,唯一或者外键约束的值 "报表中查询视图时出错

C# code
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;namespace MZYSZ{    public partial class FormSrytalreport : Form    {        public FormSrytalreport()        {            InitializeComponent();        }        private void FormSrytalreport_Load(object sender, EventArgs e)        {            try            {                //string st = SQL.getCon();                SqlConnection con = new SqlConnection(SQL.getCon());                //string sql = "select * from patient_information";                string sql = "select * from patient_cf";                con.Open();                SqlDataAdapter sda = new SqlDataAdapter(sql, con);                //DataSet ds = new DataSet();                //CfDataSet cds = new CfDataSet();                //PatientDataSet1 cds = new PatientDataSet1();                CfpatientDataSet1 cds = new CfpatientDataSet1();                sda.Fill(cds, "patient_cf");                //sda.Fill(cds, "patient_information");                CrystalReport1 crr = new CrystalReport1();                //crr.SetDataSource(cds.Tables["patient_information"]);                crr.SetDataSource(cds.Tables["patient_cf"]);                this.crystalReportViewer1.ReportSource = crr;            }            catch (Exception ex)            {                MessageBox.Show(ex.ToString());            }        }    }}我查询表patient_information的时候可以查出数据,但是查视图时patient_cf提示出错。视图patient_cf是表patient_information和表patient 通过p_id字段相等选出来的


[解决办法]
因为视图没有主键,而sda.Fill的时候会默认一个字段为主键,导致主键取值重复而失败,
[解决办法]
你就把主表的主键取出来啊,至于用不用都无所谓的
[解决办法]
探讨
但是我那个表中没有主键

引用:

你就把主表的主键取出来啊,至于用不用都无所谓的

[解决办法]
探讨

但是我那个表中没有主键引用:

你就把主表的主键取出来啊,至于用不用都无所谓的

[解决办法]
C# code
SqlConnection con = new SqlConnection(SQL.getCon());//string sql = "select * from patient_information";string sql = "select * from patient_cf";con.Open();SqlCommand cmd = new SqlCommand(sql, con);SqlDataReader reader = cmd.ExecuteReader();DataTable dtbl = new DataTable();// 这个位置添加 DataTable 列,和数据库视图中列名和列数量一致// dtbl.Columns.Add(...);// dtbl.Columns.Add(...);// ......int count = reader.FieldCount;while (reader.Read()){    DataRow drw = dtbl.NewRow();    for (int i = 0; i < count; i++)    {        drw[i] = reader[i];    }}reader.Dispose();cmd.Dispose();con.Dispose();CrystalReport1 crr = new CrystalReport1();crr.SetDataSource(dtbl);this.crystalReportViewer1.ReportSource = crr;
[解决办法]
while (reader.Read())
{
DataRow drw = dtbl.NewRow();
for (int i = 0; i < count; i++)
{
drw[i] = reader[i];
}
dtbl.Rows.Add(drw);
}
疏忽了,忘了这句,补上就好
[解决办法]
你就把视图当表一样使用就可以了
select * from vw where a=@a and b=@b
或者
select * from vw where a=‘111’ and b=‘222’

热点排行