PDA

View Full Version : توضیح اجمالی ارتباط با بانک در VS 2005



meh_secure
پنج شنبه 22 دی 1384, 22:19 عصر
سلام دوستان.
یه تفاوتهایی در ارتباط با بانک در 2003 با 2005 دیده میشه.
لطفا راهنمایی کنید .

Hamedm
پنج شنبه 22 دی 1384, 23:20 عصر
یه تفاوتهایی در ارتباط با بانک در 2003 با 2005 دیده میشه.

سلام

بنظر من بیشترین تغییر بین 2003 و 2005 مربوط به ADO.NET است که اعصاب منو ریخته بهم.

در پناه حق موفق باشید و پرتوان

M.kavyani
جمعه 23 دی 1384, 01:13 صبح
با سلام خدمت آقای حامد محمدی
یه سوال که شاید ربطی هم به این تاپیک نداشته باشد:
آیا شما در VS2005 نیز همچنان برای ایجاد ارتباط با بانک از کد نویسی در Runtime استفاده میکنید یا به استفاده از ویزارد ها و ابزار ارتباط با بانک و کار بر روی آن تغییر مسیر داده اید؟

احمد رایان
جمعه 23 دی 1384, 04:04 صبح
جون من که بالا اومد دیشب موقع Update همش Syntax Error میداد در حالیکه همه چیزش درست بود


Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=harasat.mdb;Persist Security Info=False"
Dim StrSQL As String = "Select * from personal"
Dim adapter As New OleDb.OleDbDataAdapter(StrSQL, connString)
Dim newRow As New DataSet
adapter.Fill(newRow, "Personal")
Dim dr As DataRow = newRow.Tables("personal").NewRow
dr(0) = "7731017"
dr(1) = "سایت"
dr(2) = "برنامه نویس"
newRow.Tables("personal").Rows.Add(dr)
Dim sd As New OleDb.OleDbCommandBuilder(adapter)
adapter.Update(newRow, "Personal")
adapter.Dispose()
newRow.Dispose()
sd.Dispose()


وخطا:


Syntax error in INSERT INTO statement.
هرچی کارش کردم نشد به نظر شما اشکال کار از کجاست

Hamedm
جمعه 23 دی 1384, 09:11 صبح
سلام


آیا شما در VS2005 نیز همچنان برای ایجاد ارتباط با بانک از کد نویسی در Runtime استفاده میکنید یا به استفاده از ویزارد ها و ابزار ارتباط با بانک و کار بر روی آن تغییر مسیر داده اید؟ من همیشه دوست داشتم LowLevel کار کنم. میدونم ویزاردهای 2005 فوق العاده قدرتمنده اما من کدزدن رو ترجیح میدم. اینجوری دستم بازتره. وقتی که آدم کد میزنه حواسش به همه جا هست.

اصلا میدونی تفاوت بین کدزدن و ویزاردها چیه؟
مثل اینکه شما بخواهی یک SELECT سنگین با چندتا INNER JOIN و OUTER JOIN داشته باشی و اونو بجای اینکه خودت تایپ کنی، بری از QUERY BUILDER بسازیش(البته QUERY BUILDER تمام امکانات SELECT رو نمیتونه بسازه). اینجوری کار رو درست انجام دادی اما خودت شاید مفهوم LEFT OUTER JOIN رو درست متوجه نشده باشی، چون شما یک گزینه رو تیک زدید و LEFT OUTER JOIN به SELECT اضافه شد.
وقتی که آدم دست به کیبورد میبره میدونه داره چکار میکنه و اگه فردا خواست در برنامشو تغییر بده دستش بازتره.

البته این نظر منه که به اعتقاد خیلیها غلطه.

دیگه قضاوت رو بر عهده خودت میزارم...


در پناه حق موفق باشید و پرتوان

M.kavyani
جمعه 23 دی 1384, 13:06 عصر
با سلام
جناب آقای محمدی 100 درصد با شما موافقم و متوجه هستم چی میگید ولی من ترجیح میدم که از ویزارد استفاده کنم و اینجوری درصد خطا کمتر میشه و سرعت نوشتن برنامه بالا تر میره اما چیزهایی رو که شما گفتیید نیز باید در نظر گرفت. در مواردی که ویزارد ها نیاز من رو برآورده نمی کنند شروع به تغییر کد ایجاد شده توسط ویزارد میکنم که خود مایکروسافت در این مورد اخطار داده که احتمال به هم ریختن برنامه وجود داره. مخصوصا" در استفاده از بانک ها و....
در هر حال از پاسخ شما کمال تشکر را دارم و برای شما آرزوی موفقیت و کامروایی میکنم

meh_secure
جمعه 23 دی 1384, 15:15 عصر
خب بالاخره برای حل این مشکل چه کنیم؟

sh
جمعه 23 دی 1384, 23:07 عصر
برای رفع مشکل نکات زیر رو در نظر بگیر :

1 - ببین جدول مورد نظرت دارای یک فیلد PK هست یا نه اگر نبود حتما ایجاد کن
2 - به جای استفاده از CommandBuilder مستقیما دستور Update رو بنویس تا مجبور نباشی هر بار دیتاست رو Fill کنی
3 - کانکشن رو قبل از عمل Update باز کن Cnn.Open

در ضمن همیشه سعی کن نامی به غیر از نامهای رزرو شده رو برای اشیاء انتخاب کنی در
کدهای بالا NewRow اسم مناسبی برای دیتاست نیست

================================================== =====

در مورد کار با ADO.NET 2.0 اگر مشکل خاصی دارین بگین چون کار باهاش خیلی خیلی راحتتر و آسان شده

احمد رایان
شنبه 24 دی 1384, 04:05 صبح
ببین جدول مورد نظرت دارای یک فیلد PK هست یا نه اگر نبود حتما ایجاد کن
اونوقت این یعنی چی ؟ میشه بیشتر توضیح بدهید . متشکریم

sh
شنبه 24 دی 1384, 16:12 عصر
یعنی جدول شما حتما باید یه فیلد به عنوان کلی اصلی داشته باشد یعنی یه فیلد با مقدار منحصر بفرد در هر رکورد حتی اگر AutoNumber هم بگذاری و اون رو PK کنی مشکل حل میشه

Hamedm
شنبه 24 دی 1384, 17:59 عصر
یعنی جدول شما حتما باید یه فیلد به عنوان کلی اصلی داشته باشد یعنی یه فیلد با مقدار منحصر بفرد در هر رکورد حتی اگر AutoNumber هم بگذاری و اون رو PK کنی مشکل حل میشه
در ادامه فرمایشات ایشون باید بگم اگه جدولی PK نداشته باشه، اگه مقدار مثلا تمام فیلدها یکسان باشد، SQL Server به شما اجازه DELETE رو نمیده. چون نمیتواند تفاوتی بین این دو رکورد پیدا کند.

در پناه حق موفق باشید و پرتوان

احمد رایان
یک شنبه 25 دی 1384, 02:52 صبح
از جوابهاتون ممنون در اینکه که یک جدول باید حتی الامکان یک کلید اصلی داشته باشد شکی نیست فقط اصطلاح PK برام جدید بود که متوجه شدم مخفف همان (Primary Key) می باشد.

در ضمن دوستان مشکل کدی رو که در بالا نوشته ام نمی دونند؟
چند روزه که باهاش دست و پنجه نرم می کنم و هنوز متوجه نشدم که چرا این خطا در خط مربوط به Update کردن رخ می دهد. اونهم یک خطا Syntax . همه چیز روهم بررسی کردم ظاهرا درست است تمام کدها رو هم از مثالهایی در vb.net2003 برداشتم اما نمی دونم چرا در vb.net2005 این خطا را می دهد.
از راهنماییهاتون بسیار ممنون

Hamedm
یک شنبه 25 دی 1384, 18:58 عصر
جون من که بالا اومد دیشب موقع Update همش Syntax Error میداد در حالیکه همه چیزش درست بود


Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=harasat.mdb;Persist Security Info=False"
Dim StrSQL As String = "Select * from personal"
Dim adapter As New OleDb.OleDbDataAdapter(StrSQL, connString)
Dim newRow As New DataSet
adapter.Fill(newRow, "Personal")
Dim dr As DataRow = newRow.Tables("personal").NewRow
dr(0) = "7731017"
dr(1) = "سایت"
dr(2) = "برنامه نویس"
newRow.Tables("personal").Rows.Add(dr)
Dim sd As New OleDb.OleDbCommandBuilder(adapter)
adapter.Update(newRow, "Personal")
adapter.Dispose()
newRow.Dispose()
sd.Dispose()

وخطا:


Syntax error in INSERT INTO statement. هرچی کارش کردم نشد به نظر شما اشکال کار از کجاست

سلام

چرا لقمه رو داری دور دهنت میچرخونی.
یک دستور INSERT INTO بنویس و دیتاهاتو با این دستور داخل بانک قرار بده.

در پناه حق موفق باشید و پرتوان

احمد رایان
دوشنبه 26 دی 1384, 02:47 صبح
از راهنماییتون ممنونم تلاشم رو می کنم
البته در کتاب راهنمای فارسی که از همین سایت گرفتم از همین روش برای دات نت 2003 استفاده کرده بود که من هم برای 2005 استفاده کردم و به بن بست خوردم

امیر تورانی
دوشنبه 26 دی 1384, 11:10 صبح
در ادامه فرمایشات ایشون باید بگم اگه جدولی PK نداشته باشه، اگه مقدار مثلا 2 فیلد یکسان باشد، SQL Server به شما اجازه DELETE رو نمیده. چون نمیتواند تفاوتی بین این دو رکورد پیدا کند.

در پناه حق موفق باشید و پرتوان
حامد جان این توضیحی که دادی خیلی جالب بود چون من رو این مسئله گیر کرده بودم
ممنون

meh_secure
دوشنبه 26 دی 1384, 12:40 عصر
سلام. یعنی نمیشه بدون استفاده از PK این کار رو کرد؟ بالاخره باید یک روش استانداردی داشته باشه.

Hamedm
دوشنبه 26 دی 1384, 13:01 عصر
سلام. یعنی نمیشه بدون استفاده از PK این کار رو کرد؟ بالاخره باید یک روش استانداردی داشته باشه.
سلام

منظورتون چیه؟

در پناه حق موفق باشید و پرتوان

meh_secure
دوشنبه 26 دی 1384, 13:06 عصر
در ادامه فرمایشات ایشون باید بگم اگه جدولی PK نداشته باشه، اگه مقدار مثلا 2 فیلد یکسان باشد، SQL Server به شما اجازه DELETE رو نمیده. چون نمیتواند تفاوتی بین این دو رکورد پیدا کند.

در پناه حق موفق باشید و پرتوان
منظور من این بود.
تو وی بی 6 هم چنین مشکلی هست یا خیر؟؟

Hamedm
دوشنبه 26 دی 1384, 13:19 عصر
منظور من این بود.
تو وی بی 6 هم چنین مشکلی هست یا خیر؟؟
سلام

عزیز جان این مشکل ربطی به زبان برنامه نویسی نداره. این ایرادو خود SQL Server میگیره. البته ایرادش هم درسته.

در پناه حق موفق باشید و پرتوان

meh_secure
دوشنبه 26 دی 1384, 18:05 عصر
من این رو نمی دونستم. البته تا حالا به این مشکل بر نخورده بودم.

M.kavyani
پنج شنبه 29 دی 1384, 22:29 عصر
در ادامه فرمایشات ایشون باید بگم اگه جدولی PK نداشته باشه، اگه مقدار مثلا تمام فیلدها یکسان باشد، SQL Server به شما اجازه DELETE رو نمیده. چون نمیتواند تفاوتی بین این دو رکورد پیدا کند.

در پناه حق موفق باشید و پرتوان

بابا دمت گرم به این مشکل بر خورده بودم اما دلیلشو نمی دونستم
یه سوال:
اگر دوفیلد یکسان داشته باشیم چگونه میشه پاکشون کرد؟ راهی داره یا باید مثل من کل تیبل رو پاک کنم و از نو....
این مشکل برای من در ابتدا پپیش اومد یعنی زمانی که من اطلاعات بسیار کمی در تیبل داشتم ولی اگر اطلاعات زیاد بشه چی؟
:متفکر:

Hamedm
پنج شنبه 29 دی 1384, 23:37 عصر
بابا دمت گرم به این مشکل بر خورده بودم اما دلیلشو نمی دونستم
یه سوال:
اگر دوفیلد یکسان داشته باشیم چگونه میشه پاکشون کرد؟ راهی داره یا باید مثل من کل تیبل رو پاک کنم و از نو....
این مشکل برای من در ابتدا پپیش اومد یعنی زمانی که من اطلاعات بسیار کمی در تیبل داشتم ولی اگر اطلاعات زیاد بشه چی؟
:متفکر:

سلام

بعضی از اوقات QUERY ANALYZER میتونه اونارو پاک کنه. اما در اکثر موارد نمیتونه. اول در QA امتحانش کن ببین میتونه پاک کنه یا نه.

اگه نتونست پاک کنه هیچ راهی نداری.

من معمولا برای حل این مشکل این کارو انجام میدم (این روش ایده خودمه 100درصد نمیگم بهترین روشه چون ممکنه راه بهتری هم داشته باشه):
اول تمام جدول رو بدون اون رکوردهای مشکل دار، درون یک DataTable میریزم. بعد با دستور DELETE TableName تمام رکوردهای جدول رو در بانک پاک میکنم (با این دستور رکوردهای مشکلدار هم پاک میشه). بعد DataTable که Fill کرده بودمو درون بانک انتقال میدم.

یادتون نره تمام این کارارو اگه خواستید انجام بدید درون Transaction انجام بدید. چون در غیر این صورت اگه وسط کار مشکلی پیش بیاد دیتاها از بین میره و برگردوندنشون مکافاته.

البته از قدیم گفتند پیشگیری بهتر از درمانه. سعی کنید هیچ جدولی رو بدون فیلد یکتا طراحی نکنید. منظورم ز فیلد یکتا، PK نیست. این فیلد یکتا میتونه uniqueidentifier و یا یک ID باشه که خودتون دارید موقع INSERT کردن رکورد تولید میکنید.

در پناه حق موفق باشید و پرتوان

meh_secure
جمعه 30 دی 1384, 11:08 صبح
آقای محمدی درست میگن. البته میشه مقدار چند تا فیلد رو روی هم PK قرار داد که تا حدی از بروز مشکل کم کنه. یا استفاده از یک ID که آقای محمدی فرموده بودند.

M.kavyani
جمعه 30 دی 1384, 17:01 عصر
آقای محمدی درست میگن. البته میشه مقدار چند تا فیلد رو روی هم PK قرار داد که تا حدی از بروز مشکل کم کنه. یا استفاده از یک ID که آقای محمدی فرموده بودند.

این قسمتی که برجسته اش کردم رو متوجه نشدم میشه توضیح بدی؟؟:متفکر:

meh_secure
جمعه 30 دی 1384, 19:37 عصر
منظورم اینه که چند تا فیلد رو هم PK باشند. مثل ID و تاریخ و چند تا چیز دیگه

mano
سه شنبه 02 خرداد 1385, 13:51 عصر
راجع کریستال report مقاله می خواهم اگر کسی دارد دریغ نکنه
اینم یه کد ردیف

mano
سه شنبه 02 خرداد 1385, 13:58 عصر
راجع کریستال report مقاله می خواهم اگر کسی دارد دریغ نکنه
اینم یه کد ردیف

meh_secure
سه شنبه 02 خرداد 1385, 22:33 عصر
بخش کریستال ریپورت.

Arminizer_88
دوشنبه 15 خرداد 1385, 10:01 صبح
راجع کریستال report مقاله می خواهم اگر کسی دارد دریغ نکنه
اینم یه کد ردیف
بخش کریستال ریپورت + کتاب کتاب کتاب :خجالت:


سلام

بنظر من بیشترین تغییر بین 2003 و 2005 مربوط به ADO.NET است که اعصاب منو ریخته بهم.

در پناه حق موفق باشید و پرتوان
اینو من با حامد واقعا موافقم :لبخند: چون خودم هم خیلی سر این قضیه اذیتش کردم تا تفاوتهای جدید رو حالیم بشه :لبخند: .