نمایش نتایج 1 تا 10 از 10

نام تاپیک: عدم ثبت اطلاعات در Visual Studio 2008 با بانک SQL Server

  1. #1
    کاربر دائمی آواتار aminghaderi
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    مشهد
    پست
    1,557

    Exclamation عدم ثبت اطلاعات در Visual Studio 2008 با بانک SQL Server

    با سلام و درود خدمت اسادید محترم و دوستان گرامی
    مشکل پیش امده مربوط می شه به ثبت اطلاعات در جدول اسکیو ال.
    زبان برنامه نویسم C#‎‎‎ هست و بانک اطلاعاتم هم SQLServer 2000 هستش که البته با 2005 هم همین مشکل رو دارم.
    زمانی که دستور Insert برای SQL از طریق کدی که در VS2008 نوشتم ارسال می کنم ، SQL دستور رو 2 بار انجام می دهد ، یعنی دوبار عمل ثبت اطلاعات صورت می گیرد.
    تمامی متود های PostBack هم False هستند ، اما دلیل این ثبت مجدد رو متوجه نشدم؟؟!!
    ممنون می شم اگه در حل این مشکل راهنماییم کنید.
    ناگفته نماند که من از این کدی که می نویسم به کرات در VS2005 با بانک SQL2005 هم وب و هم ویندوز استفاده کردم و جواب گرفتم.
    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Data.SqlClient;

    public partial class Image_Theme_Default : System.Web.UI.Page
    {
    //===============Sql Variable================
    SqlConnection cnn = new SqlConnection();
    SqlCommand cmd = new SqlCommand();
    SqlDataAdapter sda = new SqlDataAdapter();
    DataSet ds = new DataSet();
    DataRow dr;
    //===========================================
    String Commandtext = "";
    int Total;
    int i;
    protected void connect()
    {
    ds.Reset();
    ds.Clear();
    cnn.ConnectionString = "Data Source=.;Initial Catalog=T1;Integrated Security=True";
    cmd.Connection = cnn;
    cmd.CommandText = Commandtext;
    sda.SelectCommand = cmd;
    cnn.Open();
    sda.Fill(ds, "Amin");
    cmd.ExecuteReader();
    cnn.Close();
    }
    protected void connect_reg()
    {
    ds.Reset();
    ds.Clear();
    cnn.ConnectionString = "Data Source=.;Initial Catalog=Amin;Integrated Security=True";
    cmd.CommandText = Commandtext;
    cmd.Connection = cnn;
    sda.SelectCommand = cmd;
    cnn.Open();
    sda.Fill(ds, "Amin");
    cmd.ExecuteNonQuery();
    cnn.Close();
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
    cmd.Parameters.Clear();
    cmd.Parameters.Add("@Name", SqlDbType.NVarChar).Value = TextBox1.Text;
    cmd.Parameters.Add("@Family", SqlDbType.NVarChar).Value = TextBox2.Text;
    Commandtext = "insert into T1 (Name,Family)Values(@Name,@Family)";
    connect_reg();
    }
    }
    آخرین ویرایش به وسیله aminghaderi : سه شنبه 15 دی 1388 در 18:57 عصر دلیل: غلط املایی

  2. #2
    کاربر دائمی آواتار aminghaderi
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    مشهد
    پست
    1,557

    نقل قول: عدم ثبت اطلاعات در Visual Studio 2008 با بانک SQL Server

    مثل اینکه این مشکل ما حل شدنی نیست؟؟؟!!!
    بعد می گن دات نت رو ول نکنید!!!

  3. #3
    کاربر دائمی آواتار daffy_duck376
    تاریخ عضویت
    آبان 1385
    محل زندگی
    قزوین
    سن
    41
    پست
    858

    نقل قول: عدم ثبت اطلاعات در Visual Studio 2008 با بانک SQL Server

    چیز غیر عادی به نظر نمیاد اما یه سوال شما چرا از از dataset استفاده نمی کنی تا به جای این همه کد با 2 خط کد سروته کار هم بیاد ؟
    یه نمونه کد واست میگذارم اگه خواستی استفاده کن . این روش شما به علت اینکه همه چیز رو برنامه نویس مینویسه میتونه دارای خطا باشه و تا اونجا که من میدونم این روش تا vs2003 ازش استفاده میشد از vs2005 به بعد dataset به صورت ویژوال به vs اضافه شد و دیگه بهتره از اون استفاده بشه .(البته نظر شخصی بنده هست )
    فایل های ضمیمه فایل های ضمیمه

  4. #4
    کاربر دائمی آواتار jingiliboyz
    تاریخ عضویت
    دی 1388
    محل زندگی
    تهران
    پست
    183

    نقل قول: عدم ثبت اطلاعات در Visual Studio 2008 با بانک SQL Server

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

  5. #5
    کاربر دائمی آواتار daffy_duck376
    تاریخ عضویت
    آبان 1385
    محل زندگی
    قزوین
    سن
    41
    پست
    858

    نقل قول: عدم ثبت اطلاعات در Visual Studio 2008 با بانک SQL Server

    خوب من در واقع اونو انتقال ندادم اون فقط یه عکسه که در قسمت image url اون آیتم از منو گذاشتم و dir v, مساور rlt کردم همین

  6. #6
    کاربر دائمی آواتار aminghaderi
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    مشهد
    پست
    1,557

    نقل قول: عدم ثبت اطلاعات در Visual Studio 2008 با بانک SQL Server

    ممنونم ازت daffy_duck376 جان.
    ولی یه بحثی که هست من برنامه هام رو تحت کد می نویسم و هیچ وقت راضی نمی شم برنامه ام با ویزارد ساخته شده باشه و یا حتی یه پروسه بدون اطلاع من داخل برنامه لود بشه یا اینکه ندونم کار اون کد دقیقا چی هستش ، دلیل هم دارم چون من تا ندونم پروسه دقیقا چه کار می کنه نمی تونم یه الگریتم بهینه داشته باشم و همچنین استفاده از ویزارد ها و عملیاتی شبیه به انها دست برنامه نویس رو در طراحی پروسه های سنگین و پیچیده می بنده . (و البته که این نظر شخصی منه)
    من داخل کد بالا از شی ای به نام Dataset استفاده کردم ولی ظاهرا این دیتا ست با دیتاستی که مد نظر شماست فرق می کرد برای همین برنامه رو دانلود کردم (بابت قرار دادن کد بسیار ممنونم) و کامل کد ها رو دیدم ولی من تا به حال با این کد کار نکردم ، ممنون می شم در باره این کد یه توضیح کاملی بدین.
    DataSet1TableAdapters.simanTableAdapter siman = new DataSet1TableAdapters.simanTableAdapter();

    و یه خواهشی از دوستان دیگر که بزرگواری کنند بحث رو به بی راهه نکشند تا به نتیجه برسه.


    و یه خواهش دیگه که دوستان صاحب نظر هم در حل این مشکل مشارکت کنند تا بلکه ایراد مشخص شه؟!

    با تشکر

  7. #7
    کاربر دائمی آواتار corona
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    مشهد
    پست
    188

    نقل قول: عدم ثبت اطلاعات در Visual Studio 2008 با بانک SQL Server

    aminghaderi زعزیز کاملا واضحه چرا داره دویار توی بانک شما اطلاعات درج میشه. ایم سبک کد نویسی برای درج اطلاعات توی db رو نمیدونم چجوری یاد گرفتی . ببین دوست من وقتی قراره یک رکورد توی دیتابیس درج کنی دیگه هیچ نیازی به SqlDataAdapter و Dataset اینا نداری دوست من . کافیه مستقیم دستور رو اجرا کنی. وقتی میایم از sqldataadapter , dataset,datatable اینا استفاده می کنیم که بخوایم اطلاعاتی رو از db بگیریم ، به یک کنترل توی برناممون بایندش کنیم و کارهایی مشابه . دلیل اینکه الان داره دوبار رکورد درج میشه توی برنامه شما این خط هستش

    sda.Fill(ds, "Amin");
    cmd.ExecuteNonQuery();



    یک بار متد Fill کوئری شما رو اجرا میکنه و یک بار هم خودت باز میای Executenonquery میکنی. اگه به ماهیت دستوری که میخوای اجرا کنی نگاه کنی میبینی که دستور insert رو ایجاد می کنی ، پس چه معنی داره که اومدی تو کد نوشتی sda.SelectCommand = cmd; شما داری به خاصیت Selectcommand از data adapter یک دستور insert رو انتساب میدی که خوب مسلما کار اشتباهی هستش . شما دوست من فقط از cmd.executenonquery استفاده کن و اصلا نیازی به dataadapter , dataset اینا برای اینکه رکوردت رو توی بانک درج کنی نداری . موفق باشی .

  8. #8
    کاربر دائمی آواتار daffy_duck376
    تاریخ عضویت
    آبان 1385
    محل زندگی
    قزوین
    سن
    41
    پست
    858

    نقل قول: عدم ثبت اطلاعات در Visual Studio 2008 با بانک SQL Server

    ببین دوست عزیز dataset یه کلاسه . حال برای اونکه از توابعیکه در داخل اون تعریف شده استفاده کنیم باید از اون کلاس یه دونه توی فرمت تعریف کنی و بعد از توابعی که توی اون تعریف شده استفاده کنی . اون کدی که میبینی من یه متغیر از جنس اون dataset تعریف کردم تا بتونم به توابعی که توی اوت تعریف شده استفاده کنم. اما در مورد نظر دوست عزیمون corona (البته نظر من شخصی است ) من کاملا مخالف هستم . بهتر تمامی کارهایی رو که ما با دیتا بیس انجام میدیم از طریق این dataset بشه . به چند علت 1- خطا در کد نویسی را به صفر میرسونه چون کارهای سختشو خودش داره انجام میده . بهتره برنامه نویس وقتشو برای گرفتن باگ های برنامه بکنه تا اینکه حفظ کنه دستور insert رو دقیقا چطور مینویسن. چون نیازی نیست . 2- ما ممکن است از یه تابع در چند جا استفاده کنیم . اون وقت باید این دستورات رو 100 جا تعریف کنیمکه از نظر بنامه نیسی کار درستی نیست. 3- دیگر نیازی به اینکه کنترل کنیم به چه پارامتری چه نوع دیتا تایپی پاس میدیم نیست . چون به غیر از نوع اصلی دیتا تایپ دیگه رو قبول نمی کنه ولی در روش کدنویسی ....... البته باز هم میگم این نظر شخصی بنده میاشد و من مخلص جناب corona هم هستم. در مورد ویزارد ها هم خدمت شما بگم هیچ محدودیتی به شما اعمال نمی کنه و اتفاقا در یه کد نویسی پیچیده کلی بهت کمک میکنه . فقط یه محدودیت داره اینکه نمی گذاره کدهای اشتباه رو تئ سیستم ذخیره کنی همین!

  9. #9
    کاربر دائمی آواتار corona
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    مشهد
    پست
    188

    نقل قول: عدم ثبت اطلاعات در Visual Studio 2008 با بانک SQL Server

    daffy_duck376 عزیز ، من به هیچ عنوان از ابراز نظر کسی در مورد حرفی که می زنم ناراحت نمیشم. نمی دونم شما با کدوم قسمت حرف من مخالف هستی که نوشتی کاملا مخالفم . من خودم به شخصه هیچ وقت از ویزارد استفاده نکردم و نخواهم کرد ، من به هیچ عنوان منکر اینکه dataset یک کلاس هستس یا اینکه خیلی بدرد بخور هستش نشدم ، من برای این سناریوی دوستمون توضیحات بالا رو نوشتم . مورد های کاربرد دیتا ست کاملا واضح هستش . من تا حالا هیچ جا ندیدم کسی برای درج یک رکورد توی دیتابیس بیاداز dataset استفاده کنه .در ضمن نظری هم که تو پست قبلیم دادم روی کد دوستمون بود که سوال کرده بودن و اصلا کدی که شما گذاشته بودین رو ندیدم که بخوام راجع بهش نظری بدم . در ضمن دوست من راجع به این قسمت از پست قبلیت که گفتی بهتر تمامی کارهایی رو که ما با دیتا بیس انجام میدیم از طریق این dataset بشه خوب فکر کن ، چون مطمئنن اینجور که شما میگی نیست دوست من ، حتما میدونی که دیتاست همه رکورد ها رو با هم توی حافظه وقتی Fetch میشن نگه میداره و اگه به قول شما بهترین باشه پس دیگه میشه بگی چه نیازی به SqlDataReader میشه ؟

  10. #10
    کاربر دائمی آواتار aminghaderi
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    مشهد
    پست
    1,557

    نقل قول: عدم ثبت اطلاعات در Visual Studio 2008 با بانک SQL Server

    از daffy_duck376 و corona عزیزم بابت راهنمایشان خیلی خیلی ممنونم.
    من یه خصومت شخصی با ویزارد ها و اکثر کامپوننت ها دارم (نه کامپوننت هایی که خودم می نویسم ، اونا فرق می کنه؟!) که تاریخچه این خصومت طولانیه و از جایی شروع شد که قرار بود یه فیلد دیتابیس رو که پایگاهش فکر کنم اسکیوال یا شایدم اکسس بود رو داخل یه تکس باکس نمایش بدم که این کار قرار بود با ویزار انجام بشه که پدرم در اومد و انجام نشد و... چندین مورد دیگه.
    اما ناگفته نماند که ویزارد ها جایگاه خودشون رو در بحث سرعت برنامه نویسی و نشان دادن عملکرد کلی برنامه و ... دارند.
    -------------------------------
    daffy_duck376 جان بابت توضیح کاملی که دادی ممنونم.
    ---------------------------------
    corona جان ازت ممنونم ، متوجه اشکال کار شدم ولی این موضوع رو هنوز نتونستم برسی کنم.
    درسته عملا 2 بار داره دستور اینزرت انجام می شه ولی نکته ای که خیلی جالبه اینه که این کد با vs2005 هیچ مشکلی نداره و به خاطر همین من اصلا فکر اینکه شاید کد مشکلی داشته باشه رو نکرده بودم؟!
    corona جان ، اگه کد بهینه شده ای برای ارتباط با دیتابیس داری ، ممنون می شم اون کد رو اینجا قرار بدی تا از این به بعد از این کد استفاده کنیم.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •