PDA

View Full Version : سوال: با ست کردن Connect Timeout در رشته اتصال باز هم ارور میده



mohsenns5
چهارشنبه 08 اردیبهشت 1389, 14:04 عصر
یه استور پروسیجر تو sql دارم که حدود 2 دقیقه طول میکشه اجرا بشه و خروجی بده
حال من از تو برنامم اونو اجرا میکنم اما پیغام خطایی که ضمیمه کردم رو نشون میده
واسه رفع این مشکل از رشته اتصالم رو اینطوری تغییر دادم:




readonly string ConStr = @"Data Source=.\" + mySetting.ConnectionString + @";Initial Catalog=lendCashDB;Integrated Security=True;Connect Timeout=3000000";


اما هنوز خطا میده
لطفا راهنمایی کنید چطور این مشکل حل میشه؟
----------------------------------------------------------------------------
اینجا تابعم رو صدا میزنم:


myMoein.bedBesForAllMoein(تاریخ امروز);

اینجا تابعbedBesForAllMoein را تعریف کرده ام:


internal void bedBesForAllMoein(string SecondDate)
{
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "bedBesForAllMoein";
cmd.Parameters.AddWithValue("@SecondDate", SecondDate);
cmd.Parameters.AddWithValue("@financialYear", config.financialYear);
dbRun myDbRun = new dbRun();
myDbRun.execSelectCommand(cmd);
dvMoein = new DataView();
dvMoein = myDbRun.DvRun;
}

این هم کلاس dbRun:


using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
namespace lendCashAccountingOfwehdet.Classes
{
class dbRun
{
static readonly ConnectionStringSettings mySetting = ConfigurationManager.ConnectionStrings["lendCashDBString"];
readonly string ConStr = @"Data Source=.\" + mySetting.ConnectionString + @";Initial Catalog=lendCashDB;Integrated Security=True;Connect Timeout=3000000";
SqlConnection myCn;
private bool b=true;
public DataView DvRun;
public dbRun()
{
myCn = new SqlConnection(ConStr);
}
public bool B
{
get { return b; }
set { b = value; }
}
public void ExecCommand(SqlCommand mycmd)
{
try
{
mycmd.Connection = myCn;
if (myCn.State == ConnectionState.Closed)
myCn.Open();
try
{
mycmd.ExecuteNonQuery();
}
catch (SqlException sqle)
{
b = false;
if (sqle.Number == 2627)
MessageBox.Show("ç éں £ ¢ گ©§ی§ى ں«¢", "¦لں", MessageBoxButtons.OK, MessageBoxIcon.Error);
else if (sqle.Number == 3201)
MessageBox.Show("ê«ی© §ں§ى ¬§ى êم¢ © ëêی ں¬§", "¦لں", MessageBoxButtons.OK, MessageBoxIcon.Error);
else
MessageBox.Show("¦لں §© ںëک ںلéںمں¢ی1: " + sqle.Message, "¦لں", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
myCn.Close();
myCn.Dispose();
}
catch (SqlException se)
{
b = false;
MessageBox.Show("¦لں §© ںëک ںلéںمں¢ی2: " + se.Message, "¦لں", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public void execSelectCommand(SqlCommand mycmd)
{
try
{
mycmd.Connection = myCn;
if (myCn.State == ConnectionState.Closed)
myCn.Open();
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = mycmd;
DataTable dt = new DataTable();
mycmd.ExecuteNonQuery();
da.Fill(dt);
DvRun = new DataView();
DvRun = dt.DefaultView;
myCn.Close();
myCn.Dispose();
}
catch (SqlException es)
{
b = false;
MessageBox.Show("¦لں §© ںëک ںلéںمں¢ی3: " + es.Message, "¦لں", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}

mehdi.mousavi
چهارشنبه 08 اردیبهشت 1389, 15:06 عصر
سلام.
کافیه تا روی cmd فقط CommandTimeout Property رو صفر کنید:

cmd.CommandTimeout = 0;

موفق باشید.

mohsenns5
چهارشنبه 08 اردیبهشت 1389, 16:21 عصر
یک سوال ابتدایی:

این cmd که فرمودید کجا قرار داره؟

mehdi.mousavi
چهارشنبه 08 اردیبهشت 1389, 16:24 عصر
دو تا سوال ابتدایی:
1- چطور از داخل C#‎ با کد نویسی این موردی که فرمودید رو تغییر بدم؟
2- این cmd که فرمودید کجا قرار داره؟

منظورم تو کد خودتون بود:


SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "bedBesForAllMoein";
cmd.CommandTimeout = 0;

به خط آخر دقت کنید...

mohsenns5
چهارشنبه 08 اردیبهشت 1389, 16:37 عصر
تشکر از راهنماییتون
فقط اگه بخوایم تو تنظیمات sql اینکارو انجام بدم چجوری میشه؟
چون امکان آپدیت نرم افزار برام وجود نداره میخوام تلفنی این کار رو انجام بدم (بدون تغییر در کد)

mehdi.mousavi
چهارشنبه 08 اردیبهشت 1389, 16:50 عصر
تشکر از راهنماییتون
فقط اگه بخوایم تو تنظیمات sql اینکارو انجام بدم چجوری میشه؟
چون امکان آپدیت نرم افزار برام وجود نداره میخوام تلفنی این کار رو انجام بدم (بدون تغییر در کد)

سلام.
از اونجاییکه ADO.NET باعث بروز این timeout میشه، شما راهی غیر از Update کردن برنامه ندارید. اگر SQL Server اینکارو میکرد، اونوقت میگفتم این دستور رو اجرا کنید:


sp_configure 'remote query timeout', 600
GO
RECONFIGURE
GO

اما این مساله در مورد مشکل شما کمکی نمیکنه...

موفق باشید.