PDA

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



ABZiko
یک شنبه 05 بهمن 1393, 14:09 عصر
سلام، این ها کد اتصال به بانک داده و خوندن اطلاعات از آن هاست :


SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\A BZiko\Documents\DataBank.mdf;Integrated Security=True;Connect Timeout=30");
con.Open();
string sql = "SELECT * FROM Table WHERE Family='{1}'";
sql = string.Format(textBox1.Text);
SqlDataAdapter da = new SqlDataAdapter(sql,con);
DataTable dt = new DataTable();
da.Fill(dt);

if (dt.Rows.Count > 0)
{
MessageBox.Show("Welcome !");
}

else {
MessageBox.Show("Sorry !");
}

این هم جدول من هست :
نامش Table و دو ستون داره به نام های Row و Family !!!

من می خوام کسی که عدد 1 رو درون textbox نوشت، اگر چنین فامیلی وجود داشت، بنویسه Welcome و ... ..
ولی به خط
da.Fill(dt); ارور می ده :
Incorrect syntax near '1'.
مشکل از چیه؟

SabaSabouhi
یک شنبه 05 بهمن 1393, 15:28 عصر
سلام
حداقل یه مشکل اساسی نحوه‌ی فرمت string شما هست.
اشکال 1: متد string.Format باید شامل یک رشته باید و به تعداد پارامترها که به صورت {n} هستند، پارامتر اضافی داشته باشد
اشکال 2: پارامترهای رشته‌ها از 0 شروع می‌شوند و نه از 1


var sql = string.Format( "SELECT * FROM Table WHERE Family='{0}'", textBox1.Text );

پیش‌نهاد 1: سعی کنید تو این جور موارد رشته‌ای که از ورودی می‌گیرید رو Trim کنید. ()textBox1.Text.Trim
پیش‌نهاد 2: خوبه که تو این مدل کارها از like استفاده بشه که کاربر مجبور نباشه تمام نام رو وارد کنه.


var sql = string.Format( "SELECT * FROM Table WHERE Family like '%{0}%', textBox1.Text.Trim() );


صبا صبوحی

ABZiko
یک شنبه 05 بهمن 1393, 17:12 عصر
ممنونم سر کار خان صبوحی ، ببخشید بنده در C# مبتدی هستم، لان من اینو تغییر دادم :


SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\A BZiko\Documents\DataBank.mdf;Integrated Security=True;Connect Timeout=30");
con.Open();
string sql = "SELECT * FROM Table WHERE Family='{0}'";
sql = string.Format("SELECT * FROM Table WHERE Family='{0}'", textBox1.Text);
SqlDataAdapter da = new SqlDataAdapter(sql,con);
DataTable dt = new DataTable();
da.Fill(dt);

if (dt.Rows.Count > 0)
{
MessageBox.Show("Welcome !");
}

else {
MessageBox.Show("Sorry !");
}

دوباره به da.Fiil(dt) گیر می ده و می نویسه :
Incorrect syntax near the keyword 'Table'.

SabaSabouhi
یک شنبه 05 بهمن 1393, 17:48 عصر
سلام
آیا اسم جدولت Table هست؟ و اگرهست، آیا Schema تعریف کردی؟
اگر اسم جدول Table نیست، اسم جدولت رو بجای بگذار و اگر در Schemaی خاصی تعریف کردی
باید نام Schema رو هم قید کنی. ( فقط اگر dbo باشه می‌شه ازش صرف نظر کرد )

در ضمن، همیشه قبل از این که تو #C سعی کنی Query رو بنویسی، تو محیط خود Management Studio
اون رو بنویس، وقتی مطمئن شدی که درسته و کار می‌کنه، تو #C پیاده‌سازیش کن.

و در آخر این که من آقای صبوحی هستم، نه خانم صبوحی

صبا صبوحی

ABZiko
یک شنبه 05 بهمن 1393, 18:09 عصر
بله اسم جدولم Table هست و Schema نداره. management Studio رو باید از کجا باز کنم؟
ببخشید!:خجالت:

SabaSabouhi
یک شنبه 05 بهمن 1393, 18:17 عصر
سلام
اگر SQL Server رو نصب کنید خودش نصب می‌شه، اما اگه از نسخه‌های Express یا LocalDb استفاده می‌کنید
باید خودتون اون رو نصب کنید. می‌تونید از سایت مایکروسافت بگیرینش. ( خوشبختانه مجانی و مجازه و فیلتر هم نیست )
اما کار دیگه هم می‌تونید بکنید که راحت‌تره.
می‌تونید از طریق خود Visual Studio این کار رو انجام بدین، از منو TOOLS~SqlServer~New Query رو اجرا کنید، یک فرم
تو محیط خود VS باز می‌شه که می‌تونید به SQL Server ( یا Express یا LocalDb ) وصل بشین و query خودتون رو اونجا
نوشته و تست کنید.

صبا صبوحی

Mahmoud Zaad
یک شنبه 05 بهمن 1393, 18:21 عصر
با سلام
- دستورات رو به صورت پارامتری بنویس
- اینجا روش غیر متصل هست پس نیازی به باز کردن کانکشن نیست.

- اگر کوئریت مشکل نداشته باشه به صورت زیر جواب میده.

SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\A BZiko\Documents\DataBank.mdf;Integrated Security=True;Connect Timeout=30");
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Table WHERE Family=@Family", con);
da.SelectCommand.Parameters.AddWithValue("@Family", textBox1.Text);
DataTable dt = new DataTable();
da.Fill(dt);

if (dt.Rows.Count > 0)
{
MessageBox.Show("Welcome !");
}
else
{
MessageBox.Show("Sorry !");
}

- البته این صحیح تره

SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\A BZiko\Documents\DataBank.mdf;Integrated Security=True;Connect Timeout=30");
SqlDataAdapter da = new SqlDataAdapter("SELECT COUNT(*) AS rowsCount FROM Table WHERE Family=@Family", con);
da.SelectCommand.Parameters.AddWithValue("@Family", textBox1.Text);
DataTable dt = new DataTable();
da.Fill(dt);

if (int.Parse(dt.Rows[0]["rowsCount"].ToString()) > 0)
{
MessageBox.Show("Welcome !");
}
else
{
MessageBox.Show("Sorry !");
}