+2 امتیاز

با سلام . من  یک برنامه با وِیژوال 2012 می نویسم که یک جدول  داره که در اون مبلغ و نام حساب و تاریخ ثبت میشه حالا میخوام وقتی یک مبلغ را برای یک حساب ثبت میکنم .کدی که در  Stored Procedure   می نویسم چک کنه،اگر موجودی اون حساب از مبلغ ورودی کمتر باشه پیام بده و گر نه ثبت بشه

 

4 پاسخ

0 امتیاز

دوست عزیز مطمعنا تمامی این راه ها به نوبه خودشون درست هستن ... اما اگر بخوای یک شرط رو پروسیجر شما چک کنه و نتیجه رو به شما برگردونه و برنامه شما باتوجه به مقدار بازگشتی از sql  اقدام لازم رو انجام بده باید ازیک پارامتر خروجی استفاده کنی

من این مورد شمارو چک کردم و دقیقا با روشی که گفتم جواب میده

اول پروسیجر خودتو به این شکل تعریف کن

CREATE proc [dbo].[sum]
@name nvarchar(50),
@mablagh int ,
@bank nvarchar(50),
@tarikh nvarchar(50),
@vaze nvarchar(50)
--متغیر خروجی
,@Res int Output 
AS
DECLARE @Total int 
select @Total=  sum(Mablagh) from Table_2 where vaze =@vaze
 IF (@Total<@mablagh)
set @Res=1
 ELSE
 Begin
set @Res=0
insert into Table_2 (Name,mablagh,bank,tarikh,vaze)values(@name,@mablagh,@bank,@tarikh,@vaze)
    
END;

GO

 

بعد دستورات زیر در رویداد مورد نظر

 

 private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection con=new  SqlConnection(@"server=SERVER\SQLK8R2;Database=Booter;user ID=sa;password=1");
            SqlCommand com = new SqlCommand("sum", con);
            com.CommandType = CommandType.StoredProcedure;
            com.Parameters.AddWithValue("@name",TxtName.Text);
            com.Parameters.AddWithValue("@mablagh", Convert.ToInt32(TxtMablagh.Text));
            com.Parameters.AddWithValue("@bank", TxtBank.Text);
            com.Parameters.AddWithValue("@tarikh", TxtTarikh.Text);
            com.Parameters.AddWithValue("@vaze", CmbVaze.Text);
            com.Parameters.Add("@Res",SqlDbType.Int);
            com.Parameters["@Res"].Direction = ParameterDirection.Output;

            //---------
            try
            {
                con.Open();
                com.ExecuteNonQuery();
                int Results = Convert.ToInt32(com.Parameters["@Res"].Value);
                if (Results == 1)
                {
                    MessageBox.Show("مبلغ وارد شده بزرگتر از...");
                }
                else
                {
                    MessageBox.Show("موجودی شما ثبت شد" );
                    
                }
            }
            catch (SqlException)
            {

                MessageBox.Show("مشکل در اجرای فرمان ارسالی");
            }
            finally
            {
                con.Close();
            }
                
        }

 

به این ترتیب اگر مبلغ وارد شده بزرگتر از مجموع مبالغ مورد نظر شما با توجه به شرط داخل پروسیجر باشه اطلاعات ثبت نمیشه اما اگه کمتر باشه ثبت میشه ....

موفق باشی

سلام مجموع مبلغ درآمد ها اگر در حسابی صفر باشه خطا  میده و گرنه خوبه

اینم خطا

 Input string was not in a correct format

ویرایش شده توسط
توسط (469 امتیاز) 9 35 73

با اجازه آقای faceforce و ? baharbin

دلیلش اینه که اگر هیچ درامد و هزینه ای نداشته باشید @totoal نال میگیره به خاطر همین میگه رشته ورودی فرمت صحیحی نداره آخر پروسیجر چک کنید که اگر نال بود مقدار صفر بهش بدید.

به جای:

select
(select sum(mablagh) from Table1 where vaze = N'درآمد')
-
(select sum(mablagh) from Table1 where vaze = N'هزينه' )

از

declare @total int
set @total = (select
             (select sum(mablagh) from Table1 where vaze = N'درآمد')
               -
             (select sum(mablagh) from Table1 where vaze = N'هزينه' ));
select ISNULL(@total, 0);

استفاده کنید.

ویرایش شده توسط
توسط (2,595 امتیاز) 5 15 90
سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,924 کاربر

دسته بندی ها

...