सीआर के साथ अनुभव करने वाले लोगों के लिए यह प्रश्न।क्रिस्टल रिपोर्ट और कनेक्शन के साथ समस्या
मुझे क्रिस्टल रिपोर्ट के सेट कनेक्शन के साथ समस्या है। मुझे अपने ग्राहक से रिपोर्ट मिली है। डेटाबेस की संरचना उसके और मेरे सर्वर पर समान है। लेकिन सर्वर और डीबी का नाम अलग है। वह रिपोर्ट बनाने के लिए "कमांड" का उपयोग कर रहा है (डेटाबेस फ़ील्ड में कमांड जोड़ें-> डेटाबेस विशेषज्ञ ...)। इस कमांड में डेटा लौटने के लिए कुछ फ़ंक्शन है। मैं इस रिपोर्ट को अपने कंप्यूटर पर चलाने की कोशिश करता हूं और जब मैं TestConnectivity() निष्पादित करने का प्रयास करता हूं तो मुझे कोई समस्या है। यह विधि गलत है। मैं डीबग करने का प्रयास करता हूं और मैंने पाया कि ApplyLogOnInfo() आंतरिक ऑब्जेक्ट को लागू करने के बाद RasTable में पुरानी कनेक्शन इंफो है।
मैं सेट कनेक्शन के लिए अगले कोड उपयोग कर रहा हूँ:
private void ApplyConnection(ReportDocument report, ConnectionInfo connectionInfo)
{
ApplyLogOnInfo(report, connectionInfo);
ApplyLogOnInfoForSubreports(report, connectionInfo);
}
private void ApplyLogOnInfo(ReportDocument reportDocument, ConnectionInfo connectionInfo)
{
foreach (Table table in reportDocument.Database.Tables)
{
table.LogOnInfo.ConnectionInfo.AllowCustomConnection = true;
TableLogOnInfo tableLogonInfo = table.LogOnInfo;
tableLogonInfo.ConnectionInfo = connectionInfo;
table.ApplyLogOnInfo(tableLogonInfo);
_log.InfoFormat("Table connection state: TableName = {0}, IsConnect = {1}", table.Name, table.TestConnectivity());
}
}
private void ApplyLogOnInfoForSubreports(ReportDocument reportDocument, ConnectionInfo connectionInfo)
{
Sections sections = reportDocument.ReportDefinition.Sections;
foreach (Section section in sections)
{
ReportObjects reportObjects = section.ReportObjects;
foreach (ReportObject reportObject in reportObjects)
{
_log.InfoFormat("Type = {0}, Name = {1}",reportObject.Name, reportObject.Kind);
if (reportObject.Kind == ReportObjectKind.SubreportObject)
{
var subreportObject = (SubreportObject)reportObject;
ReportDocument subReportDocument = subreportObject.OpenSubreport(subreportObject.SubreportName);
ApplyLogOnInfo(subReportDocument, connectionInfo);
}
}
}
}
तो मेरी प्रश्न हैं:
- मैं कैसे कमांड का अधिकार कनेक्शन सेट कर सकते हैं?
- मैं कनेक्शन क्यों नहीं बदल सकता? (अगर रिपोर्ट अन्य सर्वर पर बनाई गई थी)।