PDA

View Full Version : چطور به گزارشی که با کریستا ساختم Connection String دینامیک بدم ؟



sirvan-me
جمعه 28 مهر 1391, 10:57 صبح
سلام به همه ی دوستان ... من تازه کار با کریستال رو شروع کردم ... گزارشی ساختم که بر حسب یک SP موجود تو پایگاهم کار میکنه ... که یک پارامتر به عنوان جستجو می گیره و از جدولی خاص اطلاعات مربوط به اون فیلد رو برمی گردونه ( مثلا نمره های یک دانش آموز که کد دانش آموزیش به عنوان پارامتر به کریستال فرستاده شده ) .... حالا اصلا اینا به کنار ....

فرض کنید من برنامم رو به کامپیوتر دیگه ای ببرم چطور می تونم Connection String ای که تیبل ها از اون تغذیه میشن رو در کریستال تغییر بدم ... ( وقتی برنامم رو Publish کردم !!!!! ) چطوری دسترسی بهش داشته باشم ؟!!!! اینم بگم که تو سایت Stack Over Flow این کلاس رو پیدا کردم .. اما ....

using System.Text;
using CrystalDecisions.Shared;
using System.Data.SqlClient;

namespace StackOverflow
{
public class MyCrystalReports
{

// This method will allow you may easily set report datasource based on your current SqlServerConnetion
public static void SetSqlConnection(CrystalDecisions.CrystalReports.E ngine.ReportClass MyReport, SqlConnection MySqlConnection)
{

// You may even test SqlConnection before using it.

SqlConnectionStringBuilder SqlConnectionStringBuilder = new SqlConnectionStringBuilder(MySqlConnection.Connect ionString);

string ServerName = SqlConnectionStringBuilder.DataSource;
string DatabaseName = SqlConnectionStringBuilder.InitialCatalog;
Boolean IntegratedSecurity = SqlConnectionStringBuilder.IntegratedSecurity;
string UserID = SqlConnectionStringBuilder.UserID;
string Password = SqlConnectionStringBuilder.Password;
// Of course, you may add extra settings here :D

// On Crystal Reports, connection must be set individually for each table defined on the report document
foreach (CrystalDecisions.CrystalReports.Engine.Table Table in MyReport.Database.Tables)
{

CrystalDecisions.Shared.TableLogOnInfo TableLogOnInfo = Table.LogOnInfo;

TableLogOnInfo.ConnectionInfo.ServerName = ServerName;
TableLogOnInfo.ConnectionInfo.DatabaseName = DatabaseName;
TableLogOnInfo.ConnectionInfo.IntegratedSecurity = IntegratedSecurity;

if (IntegratedSecurity != true)
{
TableLogOnInfo.ConnectionInfo.UserID = UserID;
TableLogOnInfo.ConnectionInfo.Password = Password;
}

Table.ApplyLogOnInfo(TableLogOnInfo);

}
}

}
}

منتظر راهکارهای مهندسی تون هستم ....

Mahmoud.Afrad
جمعه 28 مهر 1391, 16:02 عصر
به نظرم گزارش رو به دیتابیس وابسته نکنید بهتره.

یک دیتاست به پروژه اضافه کنید و از SP موردنظر یک TableAdapter به دیتاست اضافه کنید.

حالا در گزارش کریستال کافیه به جای اضافه کردن SP به گزارش ، از دیتاست جدول دیتاتیبل حاصل از SP رو اضافه کنید. وقتی هم میخواهید گزارش رو نمایش بدید دیتاست رو پر کنید و به گزارش پاس بدید.

فقط کانکشن استرینگ که دیتاست باهاش پر میشه را نسبی تعریف کنید.

sirvan-me
جمعه 28 مهر 1391, 16:15 عصر
میشه یه مثال کوچیک بزنید . من به صورت شماتیک تا حالا با دیتاست کار نکردم !!!!

Mahmoud.Afrad
جمعه 28 مهر 1391, 19:07 عصر
http://upcity.ir/images/34041809319879227265.png