PDA

View Full Version : انتقال محتوی datetimepicker به sql



anahita6
جمعه 11 اردیبهشت 1388, 19:17 عصر
بچه ها چه جوری میشه محتوی datetimepicker رو به فایلmdf از sql فرستاد این رو نوشتم error میده

com.CommandText = "insert into [exam]([تاریخ ثبت نام] ) values ('" + dateTimePicker1.Value+ "')";

rnm123
جمعه 11 اردیبهشت 1388, 22:38 عصر
دوست عزیز توی کد شما دوتا براکت باز است که بسته نشده در ضمن کلمات فارسی را چرا در کد خود استفاده کرده اید ؟ آنها را به معادل انگلیسی تغییر دهید

rnm123
جمعه 11 اردیبهشت 1388, 22:40 عصر
در ضمن لطفا متن خطا را در صورت امکان بیان کنید تا امکان راهنمایی های بهتر و مفیدتری باشد

anahita6
جمعه 11 اردیبهشت 1388, 23:02 عصر
متن پیغام خطا
Conversion failed when converting datetime from character string

anahita6
جمعه 11 اردیبهشت 1388, 23:04 عصر
. کجا دو تا براکت بازه ؟نه ربطی به براکت نداره. با انواع مشکل داره

anahita6
جمعه 11 اردیبهشت 1388, 23:07 عصر
کجا 2 تا براکت بازه نه ربطی به براکت نداره با نوع datetime مشکل داره

khaste_007
شنبه 12 اردیبهشت 1388, 00:36 صبح
با سلام
کد زیر رو امتحان کن

com.CommandText = "INSERT INTO [exam] ([تاریخ ثبت نام]) VALUES (@p1)";
com.Parameters.Add(new System.Data.SqlClient.SqlParameter("@p1", System.Data.SqlDbType.DateTime, 0, "p1"));
com.Parameters["@p1"].Value = dateTimePicker1.Value;
اگه بازم مشکلی بود اولا نام فیلد های دیتا بیستو لاتین کن بعد هم اگه باز مشکل داشتی اولا بگو از چه ورژن ویژوال استودیو و sqlserver استفاده می کنی و دوما نوع فیلد تاریخ ثبت نام داخل دیتا بیس رو چی انتخاب کردی. چون من با vs2008 و SQLEXPRESS با نام فیلد لاتین با نوع فیلد dateTime کد خودتو بدون ارور اجرا کردم.

anahita6
شنبه 12 اردیبهشت 1388, 12:34 عصر
از sql2000,سی شارپ2008

NewFoxStudent
شنبه 12 اردیبهشت 1388, 15:48 عصر
نوع فیلدتون توی دیتابیس احتمالا Char
به DateTime تبدیلش کنید

anahita6
شنبه 12 اردیبهشت 1388, 17:28 عصر
نه بابا دیگه اینقدر هم مبتدی نیستم , datetime هستش تو پایگاه. اون قسمت دستور sql مشکل نداره؟ منظورم تک کتیشن یا دابل کوتیشن هست? فکر کنم یا مشکل از اون باشه و یا توی انتخاب محتوای datetime picker

khaste_007
شنبه 12 اردیبهشت 1388, 17:46 عصر
سلام
اینا رو مشخص نکردی ها
1. از کد بالا که داده بودم استفاده کردی یا نه
2. نام فیلد های دیتا بیس رو لاتین کردی یا نه
3. شما که در پست اول گفته بودی از dateTimePicker1.Value استفاده کردی پس حالا می گی مشکل ممکنه بخاطر استفاده از dateTimePicker1.Value.ToString() باشه میشه قضیه رو روشن کنی
اینا رو که روشن کنی بهتر میتونیم بهت کمک کنیم.

amir.khanlari
شنبه 12 اردیبهشت 1388, 18:06 عصر
نه بابا دیگه اینقدر هم مبتدی نیستم , datetime هستش تو پایگاه. اون قسمت دستور sql مشکل نداره؟ منظورم تک کتیشن یا دابل کوتیشن هست? فکر کنم یا مشکل از اون باشه و یا توی انتخاب محتوای datetime picker که دستور زیر رو نوشتم
dateTimePicker1.Value.ToString()
وقتي شما از اين كد استفاده مي كنيد انتظار خطا هم بايد داشته باشيد چون داريد يه مقدار string رو تويه فيلدي كه از نوع datetime هست مي ريزيد!!
شما در پست اولتون يه كدي ديگه نوشته بودين از كدومشون استفاده مي كنيد ؟؟

anahita6
شنبه 12 اردیبهشت 1388, 19:20 عصر
با سلام
کد زیر رو امتحان کن

com.CommandText = "INSERT INTO [exam] ([تاریخ ثبت نام]) VALUES (@p1)";
com.Parameters.Add(new System.Data.SqlClient.SqlParameter("@p1", System.Data.SqlDbType.DateTime, 0, "p1"));
com.Parameters["@p1"].Value = dateTimePicker1.Value;
اگه بازم مشکلی بود اولا نام فیلد های دیتا بیستو لاتین کن بعد هم اگه باز مشکل داشتی اولا بگو از چه ورژن ویژوال استودیو و sqlserver استفاده می کنی و دوما نوع فیلد تاریخ ثبت نام داخل دیتا بیس رو چی انتخاب کردی. چون من با vs2008 و SQLEXPRESS با نام فیلد لاتین با نوع فیلد dateTime کد خودتو بدون ارور اجرا کردم.

دوست عزیز با کمال تشکر از شما این کد درست بود و مشکل حل شد اما چون من تا حالا comand رو با پارامتر ننوشتم اگه لطف کنی یه خورده بیشتر در موردش توضیح بدی از شما خیلی ممنون میشم یه مثال با پارامتر های بیشتر لطفا

anahita6
شنبه 12 اردیبهشت 1388, 19:28 عصر
سلام
اینا رو مشخص نکردی ها
1. از کد بالا که داده بودم استفاده کردی یا نه
2. نام فیلد های دیتا بیس رو لاتین کردی یا نه
3. شما که در پست اول گفته بودی از dateTimePicker1.Value استفاده کردی پس حالا می گی مشکل ممکنه بخاطر استفاده از dateTimePicker1.Value.ToString() باشه میشه قضیه رو روشن کنی
اینا رو که روشن کنی بهتر میتونیم بهت کمک کنیم.
آره من از همون که اول گفتم استفاده کردم متاسفانه توی انجمن sql بچه ها راهنمایی اشتباه کردن و دومی رو پیشنهاد دادن . ولی من هر دوش رو امتحان کردم error داد اما کد شما درست بود حالا فرق منطقی بین کد من و شما چی هست؟

khaste_007
شنبه 12 اردیبهشت 1388, 22:07 عصر
دوست عزیز با کمال تشکر از شما این کد درست بود و مشکل حل شد اما چون من تا حالا comand رو با پارامتر ننوشتم اگه لطف کنی یه خورده بیشتر در موردش توضیح بدی از شما خیلی ممنون میشم یه مثال با پارامتر های بیشتر لطفا

با سلام
در مورد توضیح بیشتر دقیقا نمیدونم شما کجای کد رو نمی فهمی که توضیح بدم اما یه توضیحاتی می دم امیدوارم به کارت بیاد.
ببین این روشی که من استفاده کردم استاندارد این کار هست و یک روش استاندارد مزایای خیلی زیادی داشته که استاندارد شده و خود مایکروسافت هم اگه به کدهایی که پشت صحنه فرم ساخته میشه مراجعه کنی از همین روش استفاده می کنه. این روش برای خطا یابی, تغییرات آتی, خوانایی و پشتیبانی مناسب تر هست مخصوصا وقتی کوئری ها پیچیده تر و پارامتر ها بیشتر باشند و کلا بر پایه اصول مهندسی نرم افزار این استاندارد انتخاب شده و پیشنهاد میدم خودتو به استفاده از این روش عادت بدی حتی در کوچک ترین کوئری ها.

در مورد اینکه چرا کد شما اجرا نمی شه دقیقا نمی تونم نظر بدم چون رو سیستم من اجرا میشه ولی احتمال می دم مربوط به sql2000 باشه چون همونطور که میدونید فرمتی که تاریخ ها روی c# استفاده میشه ممکنه تو دیتا بیس فرق بکنه(مثلا yyyy/mm/ddیا mm/dd/yyyy) که خوب شما در کدتون وظیفه این تغییر رو به DBMS سپردید که احتمالا موفق نشده این کارو بکنه و در کد من این تغییر رو C# در زمان اجرا انجام میده(با تعیین نوع فیلد System.Data.SqlDbType.DateTime) و این مشکل ایجاد نمیشه. توضیح اینکه DBMS من و شما هم فرق داره مال شما 2000 و مال من 2008 هست و در مال من این مشکل ایجاد نمیشه.

اینم یه مثال با چندین پارامتر اگر هم مشکلی در سینتکس داشتی می تونی با کمی دقت و یا سرچ در msdn بر طرف کنی

ابتدا تعیین پارامتر ها در کوئری sql با @

sqlInsertCommand.CommandText = "INSERT INTO [TestTable] ([pk], [c1], [c2], [c3], [c4]) VALUES (@pk, @c1, @c2, @c3, @c4)";

سپس تعریف پارامتر ها دستور در c#

sqlInsertCommand.Parameters.AddRange(new System.Data.SqlClient.SqlParameter[] {
new System.Data.SqlClient.SqlParameter("@pk", System.Data.SqlDbType.NVarChar, 0, "pk"),
new System.Data.SqlClient.SqlParameter("@c1", System.Data.SqlDbType.NVarChar, 0, "c1"),
new System.Data.SqlClient.SqlParameter("@c2", System.Data.SqlDbType.DateTime, 0, "c2"),
new System.Data.SqlClient.SqlParameter("@c3", System.Data.SqlDbType.Int, 0, "c3"),
new System.Data.SqlClient.SqlParameter("@c4", System.Data.SqlDbType.Float, 0, "c4")});
و در نهایت مقدار دهی به آنها

sqlInsertCommand.Parameters["@pk"].Value = "This is a Test For You";
sqlInsertCommand.Parameters["@c1"].Value = "Any kind of string";
sqlInsertCommand.Parameters["@c2"].Value = System.DateTime.Now;
sqlInsertCommand.Parameters["@c3"].Value = 123;
sqlInsertCommand.Parameters["@c4"].Value = 123.123;

anahita6
یک شنبه 13 اردیبهشت 1388, 21:08 عصر
[
کد اولی که شما دادید مگه با دومی فرق میکنه اولی کار میکنه ولی دومی کار نمیکنه یعنی وقتی محتوی datetimepicker رو تنهایی میفرستم مشکلی پیش نمیاد خیلی چیز عجیبیه من گیج شدم
تو رو خدا کمکم کنید دارم دیوونه میشم

khaste_007
یک شنبه 13 اردیبهشت 1388, 23:07 عصر
سلام با کد دوم نباید مشکلی داشته باشید احتمالا در کاستوم کردن آن مشکلی دارید
یک توضیح اضافه درباره تفاوت کد اول و دوم که باید بگم اینه که در کد اول با استفاده ار Parameters.Add که برای تعریف یک پارامتر به کار می رود پارامتر را در کد تعریف کردیم ولی در کد دوم با استفاده از Parameters.AddRange که برای تعریف گروهی از پارامتر ها هست این کار را انجام دادیم. ولی در کل و منطق اصلی فرقی ندارند و دلیلی برای خطا وجود نداره.
اگر مشکلتون بر طرف نشد کدی رو که نوشتید رو به همراه یک توضیخ از نوع پارامتر ها در پایگاه داده بفرستید تا بررسی کنیم(مثلا کد create Table مربوط به جدول بهترین توضیح درباره نوع فیلد ها خواهد بود).