PDA

View Full Version : آوردن داده ها از دو جدول join شده



adabyron
چهارشنبه 30 خرداد 1386, 16:11 عصر
سلام . کد زیر هنگام اجرا هیچ خطایی نمیده ولی داده ها رو توی تکست باکسها نشون نمیده میشه بگین چرا ؟


strsql = "Select _Users.*,Credits.amount From _Users " +
" INNER JOIN Credits ON _Users.Username = Credits.username Where _Users.Username like '" + username + "'";
da = newSqlDataAdapter(strsql, conn);
ds.Clear();
da.Fill(ds, "_Users");


txtName.DataBindings.Add("Text", ds, "_Users.F_Name");
txtFamily.DataBindings.Add(newBinding("Text", ds, "_Users.L_Name"));
txtUsername.DataBindings.Add(newBinding("Text", ds, "_Users.username"));
txtPassword.DataBindings.Add(newBinding("Text", ds, "_Users.password"));
txtBirthday.DataBindings.Add(newBinding("Text", ds, "_Users.birthday"));
txtCompany.DataBindings.Add(newBinding("Text", ds, "_Users.cname"));
txtOcc.DataBindings.Add(newBinding("Text", ds, "_Users.occupation"));
txtTel.DataBindings.Add(newBinding("Text", ds, "_Users.tel"));
txtMobile.DataBindings.Add(newBinding("Text", ds, "_Users.mobile"));
txtFax.DataBindings.Add(newBinding("Text", ds, "_Users.fax"));
txtEmail.DataBindings.Add(newBinding("Text", ds, "_Users.email"));
txtYahoo.DataBindings.Add(newBinding("Text", ds, "_Users.yahoo"));
chkActive.DataBindings.Add(newBinding("Checked", ds, "_Users.active"));
txtRegDate.DataBindings.Add(newBinding("Text", ds, "_Users.reg_date"));
txtAddress.DataBindings.Add(newBinding("Text", ds, "_Users.address"));
cmbGender.DataBindings.Add(newBinding("SelectedIndex", ds, "_Users.gender"));

mehdi.mousavi
چهارشنبه 30 خرداد 1386, 17:53 عصر
سلام . کد زیر هنگام اجرا هیچ خطایی نمیده ولی داده ها رو توی تکست باکسها نشون نمیده میشه بگین چرا ؟


strsql = "Select _Users.*,Credits.amount From _Users " +
" INNER JOIN Credits ON _Users.Username = Credits.username Where _Users.Username like '" + username + "'";
da = newSqlDataAdapter(strsql, conn);
ds.Clear();
da.Fill(ds, "_Users");


txtName.DataBindings.Add("Text", ds, "_Users.F_Name");
txtFamily.DataBindings.Add(newBinding("Text", ds, "_Users.L_Name"));
txtUsername.DataBindings.Add(newBinding("Text", ds, "_Users.username"));
txtPassword.DataBindings.Add(newBinding("Text", ds, "_Users.password"));
txtBirthday.DataBindings.Add(newBinding("Text", ds, "_Users.birthday"));
txtCompany.DataBindings.Add(newBinding("Text", ds, "_Users.cname"));
txtOcc.DataBindings.Add(newBinding("Text", ds, "_Users.occupation"));
txtTel.DataBindings.Add(newBinding("Text", ds, "_Users.tel"));
txtMobile.DataBindings.Add(newBinding("Text", ds, "_Users.mobile"));
txtFax.DataBindings.Add(newBinding("Text", ds, "_Users.fax"));
txtEmail.DataBindings.Add(newBinding("Text", ds, "_Users.email"));
txtYahoo.DataBindings.Add(newBinding("Text", ds, "_Users.yahoo"));
chkActive.DataBindings.Add(newBinding("Checked", ds, "_Users.active"));
txtRegDate.DataBindings.Add(newBinding("Text", ds, "_Users.reg_date"));
txtAddress.DataBindings.Add(newBinding("Text", ds, "_Users.address"));
cmbGender.DataBindings.Add(newBinding("SelectedIndex", ds, "_Users.gender"));



سلام
ابتدا باید بگم که این کد از نظر امنیتی مشکل داره. شما هیچوقت نباید از Dynamic SQL استفاده کنید چون اعمال SQL Injection رو میسر میکنه. بهترین کار استفاده از Stored Procedure هاست. ضمنا باید بگم که جداول رو هم خوب طراحی نکردید که مجبور هستید از Username بعنوان کلید دو جدول استفاده کنید.

اما در مورد سوالتون، آیا امکانش هست که فیلدهایی که نوشتید همگی NULL یا Empty باشن؟ چون کد مورد نظر مشکلی نداره. این احتمال وجود داره که چون فیلدها خالی هستن، چیزی تو TextBox ها نشون داده نمیشه. اگر بتونید Source کاملتری بنویسید، حتما می تونم کمکتون کنم.

iman_s52
چهارشنبه 30 خرداد 1386, 20:35 عصر
دستور SQL تون رو ببیرین تویه Query Analyser ببینید اونجا چیزی برمیگردونه یا نه
در ضمن سعی کنید حتی الامکان از * تویه دستوراتتون استفاده نکنید بلکه نام فیلدها تونو اسم ببرین.

adabyron
پنج شنبه 31 خرداد 1386, 08:28 صبح
ضمنا باید بگم که جداول رو هم خوب طراحی نکردید که مجبور هستید از Username بعنوان کلید دو جدول استفاده کنید.

چه فرقی میکنه که کلید اصلی چی باشه هر فیلدی که منحصر بفرد باشه میتونه بعنوان کلید اصلی انتخاب بشه من اشتباه میکنم ؟؟


اما در مورد سوالتون، آیا امکانش هست که فیلدهایی که نوشتید همگی NULL یا Empty باشن؟ چون کد مورد نظر مشکلی نداره. این احتمال وجود داره که چون فیلدها خالی هستن، چیزی تو TextBox ها نشون داده نمیشه.
نه فیلد خالی ندارم بیشتر فیلدها پر هستند

adabyron
پنج شنبه 31 خرداد 1386, 09:37 صبح
دستور SQL تون رو ببیرین تویه Query Analyser ببینید اونجا چیزی برمیگردونه یا نه
در ضمن سعی کنید حتی الامکان از * تویه دستوراتتون استفاده نکنید بلکه نام فیلدها تونو اسم ببرین.

این مشکلم حل شد ولی برای update کردن هنوز مشکل دارم این error رو میده
dynamic sql generation is not supported against multiple base tables.
یعنی از این طریق نیمشه اطلاعات دوتا جدول join شده رو آپدیت کرد ؟؟

adabyron
پنج شنبه 31 خرداد 1386, 10:14 صبح
میشه لطفا بفرمایید cascade update و cascade delete در کدوم قسمت sqlserver هستند که بشه اونا رو تنظیم کرد ؟؟

iman_s52
پنج شنبه 31 خرداد 1386, 10:58 صبح
برای اینکار شما می تونین در Enterprise Manager وارد Design Table جدول مورد نظر شده و از تول بار بالا دکمه Manage Relation رو انتخاب می کنین
اینجا شما می تونین طبق رابطه تعریف شده بین جدولاتون اون تیکهای پایین رو ست کنین.

adabyron
شنبه 02 تیر 1386, 13:48 عصر
ولی من هنوز توی آپدیت کردن مشکل دارم . نمیدونم توی c# چطوری این جدولهارو ویرایش کنم. ممنون میشم راهنماییم کنین