PDA

View Full Version : سوال: این خطای برای چی هست !!! کد رو هم گذاشتم .....



omid6630
یک شنبه 29 خرداد 1390, 11:57 صبح
بسم الله و سلام

پیغام خطا :

Incorrect syntax near 'Test'. این خطا رو از SqlDataReader sdr1=cmd1.ExecuteReader(); میگیره .


if (e.CommandName=="Change")
{
int id = Convert.ToInt32(e.CommandArgument);

SqlConnection cnn1 = new SqlConnection(SqlHelper.strConnectionString);
string select = "select * Test where id=@id";

SqlCommand cmd1 = new SqlCommand(select, cnn1);
cmd1.Parameters.AddWithValue("@id", id);

cnn1.Open();
SqlDataReader sdr1=cmd1.ExecuteReader();
sdr1.Read();


//txtid.Text = sdr1["id"].ToString();
//txtmodel.Text = sdr1["model"].ToString();
txtdate.Text = sdr1["Date"].ToString();


sdr1.Close();
cnn1.Close();

ViewState["id"] = id;
}
}

mehdi.mousavi
یک شنبه 29 خرداد 1390, 12:07 عصر
سلام.
دستور SQL ای که نوشته اید، ایراد داره. کلمه کلیدی FROM رو جا انداخته اید:

SELECT * FROM [Test] WHERE Id = @id

موفق باشید.

پاورقی: ترکیب کدهای DALC با UI کار صحیحی نیست.

youngiran
یک شنبه 29 خرداد 1390, 12:07 عصر
string select = "select * from Test where id=@id";

omid6630
یک شنبه 29 خرداد 1390, 12:15 عصر
سلام.
دستور SQL ای که نوشته اید، ایراد داره. کلمه کلیدی FROM رو جا انداخته اید:

SELECT * FROM [Test] WHERE Id = @id

موفق باشید.


پاورقی: ترکیب کدهای DALC با UI کار صحیحی نیست.

دستت درد نکنه اخوی ...

میتونی یکم درباره اینی که گفتی "ترکیب کدهای DALC با UI کار صحیحی نیست" راهنمایی کنی .!

متشکرم

mehdi.mousavi
یک شنبه 29 خرداد 1390, 12:37 عصر
دستت درد نکنه اخوی ... میتونی یکم درباره اینی که گفتی "ترکیب کدهای DALC با UI کار صحیحی نیست" راهنمایی کنی .! متشکرم

سلام.
ببینید. شما در Command Handler یکی از کنترل های صفحه ASPX خودتون، دارید دستور SELECT ای می نویسید و اونو اجرا می کنید. بدین ترتیب کدهای مربوط به User Interface رو دارید با کدهای کار با بانک اطلاعاتی ترکیب می کنید. روش صحیح این هستش که کدهای مربوط به کار با بانک اطلاعاتی رو در Assembly ی جداگانه ای قرار بدید و بر اساس نیاز، یا بطور مستقیم، یا از طریق یک لایه خارجی (که بهش میگن Facade) به اون کدها دسترسی داشته باشید. بطور مثال، کدی که شما نوشتید باید در اصل چنین چیزی باشه:


if (e.CommandName=="Change")
{
int id = Convert.ToInt32(e.CommandArgument);

Test test = Facade.Instance.GetTestData(id);
if(test != null) {
txtdate.Text = test.Date.ToString();
}

ViewState["id"] = id;
}
}

همونطوریکه می بینید، وظیفه گرفتن اطلاعات از جدول Test، ریختن اونها در یک Object ای به اسم Test و ... به عهده تابع دیگه ای گذاشته شده (در مثال فوق GetTestData)... بدین ترتیب کد شما بسیار خواناتر میشه و کنترل بسیار بیشتری روی کدتون خواهید داشت. بطور مثال فردا روزی اگر قرار بود اطلاعات رو جای بانک اطلاعاتی از یک فایل XML لود کنید، کافیه تا تابع GetTestData رو تغییر بدید و مابقی برنامه دست نخورده باقی میمونه.

موفق باشید.