ورود

View Full Version : نحوه تغییر نام سرور درزمان اجرای برنامه



alireza1384
سه شنبه 02 تیر 1388, 13:01 عصر
:اشتباه:سلام دوستان . من دربرنامه ام ازیک ریپورت استفاده کرده ام که درسیستم خودم جواب می دهد. اما وقتی گزارش را به سیستم دیگری که نام آن با سیستم فعلی متفاوت است منتقل می کنم ، درزمان اجرا نمی توانم ConnectionString مربوطه را به مقدار جدید تغییر بدهم. ازطریق کد زیر این کارراانجام می دهم ولی بدون آنکه پیغام خطایی بگیرم این عمل صورت نمی گیرد :لازم به ذکراست که بانک مورد استفاده sql2000 می باشد.
string password = "";
string UserId = "";
string DataBaseName = "";
string ServerName = "";

ConnectionInfo connectioninfo = new ConnectionInfo();
GetConnectionInfo(ref password, ref UserId, ref DataBaseName, ref ServerName);
connectioninfo.DatabaseName = Connection.clsConnection.Connection.Database;
connectioninfo.UserID = UserId;
connectioninfo.Password = password;
connectioninfo.ServerName = ServerName;
TableLogOnInfos tableLogoninfos = crystalReportViewer1.LogOnInfo;
foreach (TableLogOnInfo logoninfo in tableLogoninfos)
{
; logoninfo.ConnectionInfo = connectioninfo
{

alireza1384
سه شنبه 02 تیر 1388, 16:32 عصر
ازاساتید محترم کسی نیست راهنمایی کند؟

asefy2008
سه شنبه 02 تیر 1388, 16:56 عصر
سلام من درست سوال شما رو متوجه نشدم ولی اگر می خوای نام سیستم جدید رو استفاده کنی تو رشته اتصال چرا از این کد استفاده نمی کنی؟


System.Environment.MachineName;

alireza1384
چهارشنبه 03 تیر 1388, 10:05 صبح
مشکل دربه دست آوردن نام سیستم نیست. مشکل درارتباط دادن نام سیستم ( درواقع نام SQL Instance سیستم جاری ) به کانکشن کریستال ریپورت می باشد.

be_kh
چهارشنبه 03 تیر 1388, 10:29 صبح
به جاي نام كامپيوتر از "localhost" استفاده كن يا ip 127.0.0.1

meysam_pro
چهارشنبه 03 تیر 1388, 10:43 صبح
مشکل دربه دست آوردن نام سیستم نیست. مشکل درارتباط دادن نام سیستم ( درواقع نام SQL Instance سیستم جاری ) به کانکشن کریستال ریپورت می باشد.

سعی کن واسه گزارش گیری همیشه دیتاسورس مربوط به گزارشهات رو از سرور بفرستی. الان دیگه محاسبات مربوط به گزارشات رو با stored procedure ها میگیرن و فقط تو کریستال نشون میدن.

saeedsa
سه شنبه 11 مرداد 1390, 17:42 عصر
در اینجا دو حال پیش می آید یا گزارش subreport هست یا داکیومنت معمولی
ابندا باید داکیومنت گزارش و کانکشن اینفو را به توابع بدهد
نحوه پر کردن connectionInfo






ConnectionInfo ConnectionInfoRpt = new ConnectionInfo();
ConnectionInfoRpt.IntegratedSecurity = true;
ConnectionInfoRpt.DatabaseName = "database";
ConnectionInfoRpt.Password = "pass";
ConnectionInfoRpt.UserID = "user";
ConnectionInfoRpt.ServerName = SystemInformation.ComputerName.ToString();
Finassl rpt = new Finassl();



حالا نوبت به ارسال هم داکیومنت و کاننکشن است

ApplyLogOnInfoForSubreports(rpt, ConnectionInfoRpt);



تابع را فراخوانی می کنیم


private void ApplyReportLogon(CrystalDecisions.CrystalReports.E ngine.ReportDocument RptYears, ConnectionInfo sa)
{
foreach (CrystalDecisions.CrystalReports.Engine.Table tablex in RptYears.Database.Tables)
{
tablex.LogOnInfo.ConnectionInfo.AllowCustomConnect ion = true;
TableLogOnInfo tablelog = tablex.LogOnInfo;
tablelog.ConnectionInfo = sa;
tablex.ApplyLogOnInfo(tablelog);
}
}



حال اگر فرم شما ساب ریپورت داشته باشد فرم ریپورت خود را به جای ارسال به تابع فوق به تابع زیر ارسال می نمایید




private void ApplyLogOnInfoForSubreports(CrystalDecisions.Cryst alReports.Engine.ReportDocument rpt, ConnectionInfo ConnectionInfoRpt)
{
Sections Sections = rpt.ReportDefinition.Sections;
foreach (Section section in Sections)
{
ReportObjects reportObjects = section.ReportObjects;
foreach (ReportObject reportObject in reportObjects)
{
if (reportObject.Kind == ReportObjectKind.SubreportObject)
{
var subreportobject = (SubreportObject)reportObject;
ReportDocument SubReportDocument = subreportobject.OpenSubreport(subreportobject.Subr eportName);
ApplyReportLogon(SubReportDocument, ConnectionInfoRpt);
}
}
}
}













امیدوارم تونسته باشم مشکلی را حل کرده باشم