不用括号试试:SELECT t_xscjb.xq, V_kcbm.bmnr, t_xsjbxx.xsbh, t_xsjbxx.xm, t_xscjb.kccj, t_xsjbxx.sxsdm, t_xsjbxx.xxdm
FROM jxgl.dbo.t_xsjbxx t_xsjbxx INNER JOIN jxgl.dbo.t_xscjb t_xscjb ON t_xsjbxx.xsbh=t_xscjb.xsbh INNER JOIN jxgl.dbo.V_kcbm V_kcbm ON t_xscjb.kcbh=V_kcbm.bm WHERE t_xsjbxx.sxsdm='41' AND t_xsjbxx.xxdm='4109'
可能主要是你的sql语句,再看看你的报表的数据源是不是与最新的xsd文件相连
FROM jxgl.dbo.t_xsjbxx t_xsjbxx INNER JOIN jxgl.dbo.t_xscjb t_xscjb ON t_xsjbxx.xsbh=t_xscjb.xsbh INNER JOIN jxgl.dbo.V_kcbm V_kcbm ON t_xscjb.kcbh=V_kcbm.bm WHERE t_xsjbxx.sxsdm='41' AND t_xsjbxx.xxdm='4109'
可能主要是你的sql语句,再看看你的报表的数据源是不是与最新的xsd文件相连
具体情况是这样
学生编号- xsbh ,学生姓名-xm,课程成绩-kccj,学期-xq,省辖市代码-sxsdm,学校编号xxbh,课程编号-kcbh,字典库的编码-bm,字典库的编码内容-bmnr
三个表一个t_xscjb(xsbh,kcbh,xq,kccj) 主健xsbh,kcbh,xq
t_xsjbxx(xsbh,xm,sxsdm,xxdm) 主健 xsbh
视图 v_kcbm(bm,bmnr)
通过三个表生成交叉表最终出现上面说的错误
请各位老兄给帮一下忙。在线等待。
DataSet 类 | DataSet 成员 | System.Data 命名空间 | Constraints | ConstraintException | ForeignKeyConstraint | DataTable | UniqueConstraint
获取或设置一个值,该值指示在尝试执行任何更新操作时是否遵循约束规则。
[Visual Basic]
<Serializable>
Public Property EnforceConstraints As Boolean
[C#]
[Serializable]
public bool EnforceConstraints {get; set;}
属性值
如果实施规则,则为 true;否则为 false。默认为 true。
异常
异常类型 条件
ConstraintException 无法实施一个或多个约束。
备注
有关详细信息,请参阅 Constraints 属性。
示例
[Visual Basic, C#] 以下示例创建一个 DataSet,该数据集包含一个表、一个列、五个行和一个 UniqueConstraint。EnforceConstraints 属性被设置为 false,每一行的值都设置为同一个值。如果 EnforceConstraints 属性被重置为 true,则生成 ConstraintException。
[Visual Basic]
Private Sub DemonstrateEnforceConstraints()
' Create a DataSet with one table, one column and a UniqueConstraint.
Dim ds As DataSet = New DataSet("myDataSet")
Dim t As DataTable = New DataTable("myTable")
Dim c As DataColumn = New DataColumn("col1")
c.Unique = True
t.Columns.Add(c)
ds.Tables.Add(t)
Console.WriteLine("constraints.count: " & t.Constraints.Count)
' add five rows.
Dim r As DataRow
Dim i As Integer
For i = 0 To 4 r = t.NewRow()
r("col1") = i
t.Rows.Add(r)
Next
t.AcceptChanges()
ds.EnforceConstraints = False
' Change the values of all rows to 1.
Dim thisRow As DataRow
For Each thisRow In t.rows
thisRow("col1") = 1
Next Try
ds.EnforceConstraints = True
Catch ex As System.Data.ConstraintException
Console.WriteLine("ConstraintException: " + ex.Message)
End Try
End Sub
[C#]
private void DemonstrateEnforceConstraints(){
// Create a DataSet with one table, one column and a UniqueConstraint.
DataSet ds= new DataSet("myDataSet");
DataTable t = new DataTable("myTable");
DataColumn c = new DataColumn("col1");
// A UniqueConstraint is added when the Unique property is true.
c.Unique=true;
t.Columns.Add(c);
ds.Tables.Add(t);
Console.WriteLine("constraints.count: " + t.Constraints.Count);
// add five rows.
DataRow r ;
for(int i=0;i<5;i++){
r = t.NewRow();
r["col1"] = i;
t.Rows.Add(r);
}
t.AcceptChanges();
ds.EnforceConstraints=false;
// Change the values of all rows to 1.
foreach(DataRow thisRow in t.Rows){
thisRow["col1"]=1;
//Console.WriteLine("\t" + thisRow[0]);
}
try{
ds.EnforceConstraints=true;
}
catch(System.Data.ConstraintException ex){
Console.WriteLine("ConstraintException: " + ex.Message);
}
catch(System.Exception sysEx){
Console.WriteLine(sysEx.GetType().Name);
Console.WriteLine(sysEx.Message);
}
}
1. 设计一个DataSet
2. 创建一个.rpt文件同时将其指定给上一步建立的DataSet。
3. 在aspx页面中拖放一个CrystalReportViewer控件同时将其与前面的rpt文件建立联系。
4. 在代码中访问数据库并把数据存入DataSet
5. 调用DataBind方法。
设计一个DataSet
1) 右击“解决方案浏览器”,选择“添加”--“添加新项”-->“数据集”
2) 从“服务器资源管理器”中的“SQL Server”中拖放“Stores”表(位于PUBS数据库中)。
3) 此时在数据集中就会有一个Stores表的结构图。
- .xsd文件中仅仅包含一个结构图,但是不会有任何数据在里面。
创建 .rpt 文件 :
4) 使用上面的介绍过的方法创建此文件,唯一的不同就是使用数据集来代替前面的直接连接数据。
5)建立.rpt文件之后,右击“详细资料”-->"添加/删除数据库“
6) 在”数据库专家“窗口中,展开”项目数据“(代替以前的OleDb),展开“ADO.Net数据集”--"DataSet1“,选择”Stores“表。
7) 将”Stores"表添加到“选定的表”中,点击“OK”
8) 使用PULL模式下的方法,建立一个WebForm
建立一个Crystal Report Viewer 控件
9) 建立一个Crystal Report Viewer 控件,并设定其属性,此处与PULL模式下是一致的。
Code Behind 代码:
10) 在Page_Load方法中使用下面的子函数:
VB.Net代码:
Sub BindReport()
Dim myConnection As New SqlClient.SqlConnection()
myConnection.ConnectionString= "server= (local)\NetSDK;database=pubs;Trusted_Connection=yes"
Dim MyCommand As New SqlClient.SqlCommand()
MyCommand.Connection = myConnection
MyCommand.CommandText = "Select * from Stores"
MyCommand.CommandType = CommandType.Text
Dim MyDA As New SqlClient.SqlDataAdapter()
MyDA.SelectCommand = MyCommand
Dim myDS As New Dataset1()
'这就是我们在设计模式上使用的DataSet
MyDA.Fill(myDS, "Stores")
'你不得不使用与你前面DataSet相同名字。
Dim oRpt As New ReportDocument()
' 水晶报表绑定
oRpt.SetDataSource(myDS)
' 设定水晶报表的ReportSource
CrystalReportViewer1.ReportSource = oRpt
End Sub
C#代码:
private void BindReport()
{
string strProvider = "Server=(local);DataBase=pubs;UID=sa;PWD=";
ReportDocument oCR = new ReportDocument();
Dataset1 ds = new Dataset1();
SqlConnection MyConn = new SqlConnection(strProvider);
MyConn.Open();
string strSel = "Select * from Stores";
SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel,MyConn);
MyAdapter.Fill(ds,"stores");
oCR.SetDataSource(ds);
this.CrystalReportViewer1.ReportSource = oCR;
}
注意:在上面的代码中,你得注意一下oRpt是"Strongly Typed"的报表文件。如果你需要使用"UnTyped"报表,你得使用ReportDocument对象,然后再调用报表文件。
运行你的程序。
11) 运行你的程序
备注:
Dim oRpt As New ReportDocument()
1、在菜单“项目”-〉“添加引用”:CrystalDecisions.CrystalReports.Engine
2、在源代码里添加引用:using CrystalDecisions.CrystalReports.Engine;