2012-11-05 2 views
0

MVC 응용 프로그램에 Crystal Reports을 배포하려고합니다. Crystal Report Viewer를 최대한 활용하려면 내 dev 환경에서 상당히 잘 작동하는 webform을 사용해야합니다.동적으로 설정된 Crystal Report가 여전히 db 로그인을 묻습니다.

응용 프로그램이 사용자의 서버에 배포되고 개인 dbs에 연결됩니다. 즉, 보고서 또는 응용 프로그램을 디자인 할 때 최종 연결 정보가 없습니다.

web.config 파일에서 해당 항목을 사용하여 성공적으로 연결할 수 있습니다. DataTable에 보고서 정보를로드하고 보고서에 전달하십시오. 그러나 보고서는 여전히 db 자격 증명을 요구합니다. 이 보고서는 내 데이터베이스에 연결되도록 설정되어 있으므로 내 자격 증명을 묻습니다.이 자격 증명 없이는 진행하지 않습니다. 그러나 최종 보고서는 db에서 올바른 정보를 보여줍니다.

보고서 또는 코드 뒤에서 변경할 필요가 있는지 확실하지 않습니다.

protected void Page_Load(object sender, EventArgs e) 
{ 
    string strReportName = System.Web.HttpContext.Current.Session["ReportName"].ToString(); 
    try 
    { 
     ReportDocument rd = new ReportDocument(); 
     string strRptPath = Server.MapPath("~/") + "Rpts//" + strReportName; 
     rd.Load(strRptPath); 

     SqlParameter[] sqlParams = {}; 
     DataTable testDt = DBHelper.GetTable("rptInvtDuplDesc", sqlParams); 
     rd.DataSourceConnections.Clear(); 
     rd.SetDataSource(testDt); 
     CrystalReportViewer1.ReportSource = rd; 
    } 
    else 
    { 
     Response.Write("<H2>Nothing Found; No Report name found</H2>"); 
    } 
} 

어떻게 원래의 자격 증명을 요청에서 보고서를 방지 할 : 지금 보고서 ReportSource을 설정하고 방법이 무엇입니까?

편집 :

나는 이런 내 DB에 로그인 전달하는 경우 :

rd.SetDatabaseLogon("username", "password"); 

을 내가 다시 DB 로그인을하지 않습니다. 자격 증명은 보고서를 만드는 데 사용되는 db에 대한 것이어야하지만 표시된 결과는 위의 방법으로 채워진 DataTable에 있습니다. 현재 데이터베이스에서 필요로하는 데이터가 있다면 왜 원래 데이터베이스에 연결해야합니까?

EDIT2 :

나는이 보고서의 2 데이터 소스를 가지고있다. 하나는 db의 테이블이고 다른 하나는 저장 프로 시저의 결과입니다. 나는 이것이 추가 로그인의 원인임을 알게되었습니다.

답변

0

datasouce에 대한 자격 증명을 보고서에 입력해야합니다.

이상적으로 보고서에는 단일 datasource이 포함됩니다. 이것이 가능하지 않은 경우 각각에 대한 자격 증명 또는 각각에 대한 데이터를 제공해야합니다.

당신이 데이터를 제공하려는 경우 이런 식으로 뭔가가 잘 작동 :

rd.Database.Tables[0].SetDataSource(testDt); 
rd.Database.Tables[1].SetDataSource(micssys); 

그렇지 않으면,이 같은 보고서는 각 datasource에 대한 직접 DB를 액세스 할 수 있습니다 :

rd.SetDatabaseLogon("username","password}"); 
1

여기 내 블로그 게시물 here을보십시오.

몇 가지 조치가 필요하지만 주된 것은 새로운 TableLogOnInfo 인스턴스를 작성한 다음 ApplyLogOnInfo을 적용하는 것입니다.

+0

나는 것을 내가 가지고있는 또 다른 'CR'문제를 위해 이것을 시도해야한다. 이 질문에 대해서는 이미 보고서에서 원하는 데이터를 얻기 위해'C# '을 사용했습니다. 왜 다시 db에 로그인해야합니까?내 경험상, 'CR'은 큰 데이터를 처리하는 데 그리 좋지 않으며 오히려 더 나은 도구를 사용하려고합니다. 보고서를 단순히 프레젠테이션으로 사용하고 데이터 수집이나 처리를 위해 사용할 수 없기를 바랍니다. – davids

+0

나는 보고서에 데이터를 제공하는 두 개의 테이블이 있다는 점을 배웠다. 이제 각각 (rd.Database.Tables [0] .SetDataSource (testDt);)을 사용하여 데이터 소스를 설정할 수 있지만 테이블 이름은 스왑 된 것처럼 보입니다. SetDataSource를 사용하여 테이블 이름을 어떻게 강제로 만드나요? 어떤 아이디어? – davids

관련 문제