我使用....水晶報表登錄失敗問題
Framework 3.5的C#Visual Studio 2008和基於Web的應用程序
使用的數據集,即我的服務,我已經創建的報告使我的數據集和我那綁定帶報告的數據集。
但是有時CR瀏覽器開始彈出錯誤「Logon Failed」,登錄框中登錄信息中填充了數據集名稱。
我正在尋找它的解決方案很長一段時間,但沒有罰款任何合適的答案。
我使用....水晶報表登錄失敗問題
Framework 3.5的C#Visual Studio 2008和基於Web的應用程序
使用的數據集,即我的服務,我已經創建的報告使我的數據集和我那綁定帶報告的數據集。
但是有時CR瀏覽器開始彈出錯誤「Logon Failed」,登錄框中登錄信息中填充了數據集名稱。
我正在尋找它的解決方案很長一段時間,但沒有罰款任何合適的答案。
經過很長時間的努力,我發現主要原因是存儲過程中返回數據的錯誤。
SP從table1或table2返回數據(它們都具有相同的結構),但是當我從table2中選取數據時,我沒有寫出所有需要的列名。
看起來很奇怪,我應該得到像列沒有找到錯誤,而不是數據庫登錄失敗的東西。
你沿着你的creditials傳遞代碼:
ReportDocument rep = new ReportDocument();
rep.FileName = Server.MapPath("CrystalReport1.rpt");
set.SetDatabaseLogon("username", "password", "sql-server", "database"); // this line pass the login parameters required for login
我綁定我的報告使用這樣的數據集: - ' DataSet ds = getReportData(); rpt.SetDataSource(ds); CrystalReportViewer1.ReportSource = rpt;' ' 現在我應該在用戶名/密碼等?因爲我不認爲數據集有任何密碼。 –
你在哪裏檢索數據集的數據(數據庫,CSV,文本文件等)? –
嘗試了這一點。另外,還要確保你有水晶報表的正確版本在所有地方
private ConnectionInfo crConnectionInfo = new ConnectionInfo();
ReportDocument rpt = new ReportDocument();
protected void Page_Load(object sender, EventArgs e)
{
CrystalReportViewer1.Width = 900;
CrystalReportViewer1.ToolPanelView = ToolPanelViewType.None;
BindReport();
}
private void BindReport()
{
rpt.Load(Server.MapPath("ProductList.rpt"));
DataSet ds = getReportData();
rpt.SetDataSource(ds.Tables[0]);
CrystalReportViewer1.ReportSource = rpt;
}
private DataSet getReportData()
{
DataSet ds = new DataSet();
string ConnectionString = ConfigurationManager.ConnectionStrings["myconn"].ConnectionString;
SqlConnection con = new SqlConnection(ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "GetProductList";
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
cmd.Connection = con;
SqlDataAdapter sda = new SqlDataAdapter(cmd);
sda.Fill(ds, "ctable");
con.Close();
return ds;
}
在我的病例報告有時工作,而給我錯誤一段時間。我還發現它對某些特定的記錄很感興趣。異常細節並沒有讓我知道它爲什麼會發生。 –
你有沒有試過我的代碼你是否在點擊報告中的下一頁時得到提示。另一件事是你使用子報表。您是在設計時製作數據集嗎? – Tassadaque
我當時面臨着同樣的問題,當我移動從開發計算機應用到真實服務器。這是一個IIS7 MVC應用程序(CR 13.0),對SQL服務器進行了可信驗證。
我修復它的方式是通過爲應用程序創建一個新的應用程序池。我將新應用程序池用戶IIS APPPOOL\applicationpoolname
的權限授予應用程序中使用的SQL Server數據庫。 然後錯誤消失了。
我的假設是,通過代碼應用的userlogininfo並不總是被CR運行時使用,而是它使用IIS用戶登錄信息。
不幸的是,這個錯誤是不明確的,因爲它是幾十個無關問題的生成錯誤。在這種情況下,「登錄失敗」可能是由於偶爾的架構不匹配造成的。
DataSet對象可以包含分層數據。 如果您的服務正在返回包含分層數據的數據集,並且某些子項缺失,則其模式已有效更改。
有幾種方法可確保DataSet具有匹配的模式。如果您序列化對象到XML,然後從XML,然後生成DataSet中的簡單的方式實現一致的架構是從改變你的代碼:
reportData.ReadXml(new MemoryStream(Encoding.UTF8.GetBytes(reportXml)));
到
reportData.ReadXmlSchema(schemaPath);
reportData.ReadXml(
new MemoryStream(Encoding.UTF8.GetBytes(reportXml)),
XmlReadMode.IgnoreSchema
);
其中schemaPath點到先前在發展與呼叫產生
File.WriteAllText(
@"C:\MyTempPath\MyReportName.xsd",
reportData.GetXmlSchema(),
Encoding.Unicode
);
在生成模式XSD文件,你還希望該模式是作爲一個完整的再版儘可能地提供數據,因此您希望儘可能使用完整的數據層次結構。這也是報告必須從其創建以使其模式匹配的XML。如果模式發生變化,那麼必須在設計人員中使用新數據打開報告,並且必須「驗證數據庫」,然後保存RPT文件。
你能發表一些代碼嗎? –