PDA

View Full Version : درست اجرا نشدن برنامه



r_mehrizi
پنج شنبه 06 آبان 1389, 13:48 عصر
من در برنامه ام از دو تا دیتابیس استفاده می کنم برای اینکه اطلاعات را داخل برنامه نشون بدم خیلی جاها جدولهای دیتابیس دومی با اولی join میشه برنامه را وقتی از دات نت اجرا می کنم اطلاعات دیتابیس دومی نشون داده میشه اما از طریق local که اجرا می کنم اطلاعات دیتابیس دومی نمایش داده نمیشه
خیلی ضروری هست خواهشا راهنمایی کنید

حمیدرضاصادقیان
پنج شنبه 06 آبان 1389, 16:42 عصر
سلام.

رنامه را وقتی از دات نت اجرا می کنم اطلاعات دیتابیس دومی نشون داده میشه اما از طریق local که اجرا می کنم

اینکه گفتین یعنی چی؟؟؟ من چند بار خوندم متوجه نشدم. بعد خطایی به شما میده؟/

r_mehrizi
جمعه 07 آبان 1389, 19:53 عصر
یه پروژه تبادل پیام نوشتم مدیر سیستم میاد و پیامهایی که برای سالهای قبل هست ارشیو میکنه این پیامهای ارشیو شده داخل دیتا بیس دیگه ذخیره میشه برنامه را از طریق دات نت که اجرا میکنم پیامهای ارشیو شده را نشون میده اما وقتی داخل iis اجرا می کنم پیامی را نشون نمیده

حمیدرضاصادقیان
جمعه 07 آبان 1389, 22:58 عصر
سلام.آیا خطایی به شما نشون میده؟؟ اگر خطایی دریافت میکنید لطفا خطا رو پست بفرمائید

r_mehrizi
شنبه 08 آبان 1389, 09:04 صبح
کدهای زیر را نوشتم تا پیامهای ارسال شده را به من نشون بده داخل sql جواب درست بر می گردونه اما داخل برنامه اگه برنامه را از طریق local اجرا کنم هیچی را نشون نمیده



USE [ArchivMsBoard]
GO
/****** Object: StoredProcedure [dbo].[R_MessageSentBox] Script Date: 10/30/2010 09:21:41 ******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
ALTERprocedure [dbo].[R_MessageSentBox] @search nvarchar(1000)
as
declare @sql varchar(10)
set @sql=dbo.GetSql()
declare @DRIVER varchar(50)
set @DRIVER=dbo.GetDRIVER()
declare @str nvarchar(4000)
set @str=N'
DECLARE @temp table
(
m_id int,
u_id int,
tilte nvarchar(50),
m_text nvarchar(max),
daterefferal nvarchar(15),
um_time nvarchar(15),
um_id int,
attach nvarchar(50),
nameFamilyReceiver nvarchar(1000),
sender nvarchar(150),
i_id int,
i_title nvarchar(50),
s_id int,
s_title nvarchar(50),
pr_id int,
pr_title nvarchar(50),
k_id int,
k_title nvarchar(50),
o_id int,
o_name nvarchar(50)
)
INSERT INTO @temp
SELECT m.m_id,
um.u_id,
m.m_title,
m.m_text,
um.um_dateRefferal ''date'',
um.um_time ''time'',
um.um_id,
case um.um_attach when 0 then '' '' when 1 then '' ''
end,
dbo.GetReceiver(um.um_id) ''nameFamilyReceiver'',
usr.u_name + '' '' + usr.u_family '''' ,
i.i_id,
i.i_title ''i_title'',
s.s_id,
s.s_title ''s_title'',
pr.pr_id,
pr.pr_title ''pr_title'',
k.k_id,
k.k_title ''k_title'' ,
o.o_id,
o.o_name

from
tbl_UserMessage um
left join tbl_message m on um.m_id=m.m_id
left join OPENROWSET( '+ @sql +' , '+ @DRIVER +' , '+'MsBoard.dbo.tbl_secret) s on um.s_id=s.s_id
left join OPENROWSET( '+ @sql +' , '+ @DRIVER +' , '+'MsBoard.dbo.tbl_important) i on um.i_id=i.i_id
left join OPENROWSET( '+ @sql +' , '+ @DRIVER +' , '+'MsBoard.dbo.tbl_kind) k on um.k_id=k.k_id
left join OPENROWSET( '+ @sql +' , '+ @DRIVER +' , '+'MsBoard.dbo.tbl_priority) pr on um.pr_id=pr.pr_id
LEFT JOIN OPENROWSET( '+ @sql +' , '+ @DRIVER +' , '+'MsBoard.dbo.tbl_user) usr on usr.u_id=um.u_id
left join OPENROWSET( '+ @sql +' , '+ @DRIVER +' , '+'MsBoard.dbo.tbl_organization ) o on o.o_id=usr.o_id
left join OPENROWSET( '+ @sql +' , '+ @DRIVER +' , '+'MsBoard.dbo.tbl_userPost) up on up.u_id=usr.u_id
left join OPENROWSET( '+ @sql +' , '+ @DRIVER +' , '+'MsBoard.dbo.tbl_post) p on p.p_id=up.p_id
where
ISNULL(um.um_isSaveMessage,0)=0 and
ISNULL(um.um_isDelete,0) =0 AND
Not Exists (select * from tbl_attach at
where at.a_refferalCode2=um.um_id AND a_type2=1)
order by ''date'' desc,''time'' desc

select * from @temp
'
set @str=@str+@search
execsp_executesql@str





USE [ArchivMsBoard]
GO
/****** Object: UserDefinedFunction [dbo].[GetDRIVER] Script Date: 10/30/2010 09:27:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER function [dbo].[GetDRIVER] ()
returns nvarchar(50)
as
begin

declare @DRIVER nvarchar(50);
set @DRIVER=''' DRIVER={SQL Server}; SERVER={ADMIN-B9F491532} '''
return @DRIVER;
end






USE [ArchivMsBoard]
GO
/****** Object: UserDefinedFunction [dbo].[GetSql] Script Date: 10/30/2010 09:27:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER function [dbo].[GetSql] ()
returns nvarchar(20)
as
begin

declare @sql nvarchar(50);
set @sql='''MSDASQL''';
return @sql;
end


خطایی که میده این هستش
Failed to open a rowset. Details: ADO Error Code: 0x Source: Microsoft OLE DB Provider for SQL Server Description: Ad hoc access to OLE DB provider 'MSDASQL' has been denied. You must access this provider through a linked server. SQL State: 42000 Native Error: Failed to open a rowset. Error in File C:\Windows\TEMP\R_messageSentBox {F0E0FFE6-29FA-

حمیدرضاصادقیان
شنبه 08 آبان 1389, 09:18 صبح
سلام.شما یک Linked server برای msdasql ایجاد کنید. چون پیغام خطا میگه شما دسترسی به این ندارید. با ایجاد یک Linked server به این provider باید مشکلتون حل بشه.

r_mehrizi
شنبه 08 آبان 1389, 09:44 صبح
هر دو دیتابیس من روی sql server 2008 هست وقتی صفحه new linked server اس کیو ال را باز می کنم یک سری اطلاعات از من می پرسه نمی دونم چه چیزی باید وارد کنم
آیا این که برنامه ام اجرا نمیشه ربطی به نسخه اس کیو ال که نصب کردم داره؟
در دستورات sql هم از openrowset استفاده کردم اگه از link server استفاده کنم به جای این دستورات چه چیزی باید بنویسم؟
خیلی خیلی ممنون میشم راهنمایی کنید چون خیلی فوری هستش

حمیدرضاصادقیان
شنبه 08 آبان 1389, 10:08 صبح
سلام.دیتابیس های شما روی instance های مختلف sql server هست؟؟؟ یا نه فقط روی یک instance قرار داره؟

r_mehrizi
شنبه 08 آبان 1389, 10:19 صبح
منظورتون از instance چیه؟

r_mehrizi
شنبه 08 آبان 1389, 10:39 صبح
روی instance های مختلف sql server هست

حمیدرضاصادقیان
شنبه 08 آبان 1389, 10:54 صبح
منظور اینکه شما چند نسخه 2008 روی سیستم نصب دارید؟؟
یا فقط یک نسخه از 2008 رو نصب کردید.

r_mehrizi
شنبه 08 آبان 1389, 11:20 صبح
یک نسخه از sql نصب هست

حمیدرضاصادقیان
شنبه 08 آبان 1389, 11:32 صبح
خوب پس با این اوصاف نه نیاز به openrowset داری نه نیاز به linked server . اینا برای زمانی هستند که شما بخواهید بین چند سرور مختلف یک کوئری رو اجرا کنید.
شما برای اینکار میتونید از شکل زیر استفاده کنید.

select * from database1.dbo.table1

r_mehrizi
شنبه 08 آبان 1389, 11:48 صبح
من openrowset ها را برداشتم و به جاش دستوری که شما گفته بودید را گذاشتم استور پروسیجر داخل اس کیو ال درست جواب میده اما برنامه را که اجرا می کنم هیچی نشون نمیده

داخل گزارش هم این پیغام خطا را میده

Logon failed. Error in File C:\DOCUME~1\ADMIN-~1\ASPNET\LOCALS~1\Temp\R_messageSentBox {C96AD968-687A-4CE1-AF14-8CC9CCC54F4A}.rpt: Unable to connect: incorrect log on parameters.

حمیدرضاصادقیان
شنبه 08 آبان 1389, 12:43 عصر
خوب حالا یک قدم رفتیم جلو. شما از داخل برنامه به چه صورت به دیتابیس متصل شدید؟؟

r_mehrizi
شنبه 08 آبان 1389, 12:55 عصر
دو تا فایل xml گذاشتم و در هر کدوم رشته اتصال به هریک از دیتابیس ها را نوشتم
در فایل اولی نوشتم
<ConnectionString>Data Source=Localhost;Initial Catalog=ArchivMsBoard;Integrated Security=True</ConnectionString>

در فایل دومی نوشتم
<ConnectionString>Data Source=Localhost;Initial Catalog=MsBoard;Integrated Security=True</ConnectionString>





public DBOperator()
{
lock (padlock)
{
if (con == null)
{
XmlDocument doc = new XmlDocument();
try
{

doc.Load("appConfig.xml");
XmlNodeList node = doc.GetElementsByTagName("ConnectionString");
string conStr = node[0].InnerText;
//conStr


Encryptor encryptor = new Encryptor("YaBaBalHavaeJ8#3)");
try
{
conStr = encryptor.Decrypt(conStr.Trim());

}
catch (Exception ex)
{

}
ProjectType = true;
con = new SqlConnection(conStr);

}
catch (Exception)
{
Page pg = new Page();
doc.Load(pg.Server.MapPath("~/appConfig.xml"));
XmlNodeList node = doc.GetElementsByTagName("ConnectionString");
string conStr = node[0].InnerText;
con = new SqlConnection(conStr);

ProjectType = false;
}

}
if (Archivcon == null)
{
XmlDocument doc = new XmlDocument();
try
{
doc.Load("ArchivappConfig.xml");
XmlNodeList node = doc.GetElementsByTagName("ConnectionString");
string ArchivconStr = node[0].InnerText;
//conStr


Encryptor encryptor = new Encryptor("YaBaBalHavaeJ8#3)");
try
{
ArchivconStr = encryptor.Decrypt(ArchivconStr.Trim());

}
catch (Exception ex)
{

}
ProjectType = true;
Archivcon = new SqlConnection(ArchivconStr);
}
catch (Exception)
{
Page pg = new Page();
doc.Load(pg.Server.MapPath("~/ArchivappConfig.xml"));
XmlNodeList node = doc.GetElementsByTagName("ConnectionString");
string ArchivconStr = node[0].InnerText;
Archivcon = new SqlConnection(ArchivconStr);
ProjectType = false;
}
}
}
}

حمیدرضاصادقیان
شنبه 08 آبان 1389, 13:05 عصر
خوب شما یک Breakpoint ابتدای همین روال بذار بعد Trace کن و قدم به قدم برو جلو ببین روی کدوم خط بهت خطا میده؟
ایا محتویات Sp رو که عوض کردی و پارامترهاشو تغییر دادی در برنامه نیز لیست پارامترها رو درست کردی؟

r_mehrizi
شنبه 08 آبان 1389, 13:16 عصر
من اگر برنامه را از طریق دات نت اجرا کنم برنامه اجرا میشه و مشکلی نداره اما اگر در نوار ادرس بنویسم http://localhost/BBS پیامهایی که مربوط به قسمت آرشیو هست نمایش داده نمیشه و در گزارشش پیغام خطایی را که در بالا گفتم نشون میده

حمیدرضاصادقیان
شنبه 08 آبان 1389, 13:43 عصر
من پیشنهاد میکنم این سوال رو در بخش asp.net یا سی شارپ مطرح کنید.چون الان شما از طریق برنامه به راحتی میتونید برنامه رو اجرا کنید.اینجا فکر میکنم شاید در تنظیمات IIS باید موردی رو تنظیم کنید یا در فایل Config باید تنظیمات خاصی انجام بشه.
موفق باشید

r_mehrizi
شنبه 08 آبان 1389, 14:02 عصر
ممنون از راهنماییتون یوزر asp.net‌را به لیست یوزرها اضافه کردم درست شد