View Full Version : سوال: textbox به عنوان ورودی function
zahra.mf
سه شنبه 07 شهریور 1391, 23:57 عصر
سلام من یه تابع از نوع Scalar-valued function در sql نوشتم ورودی این تابع 2 تا textbox هست که مقداراشون توی این تابع در هم ضرب میشه و خروجیش باید توی یه جدول اینسرت کنم هم ورودیا و هم خروجی همه از نوع int هستن نمیدونم چه جور باید textbox به عنوان ورودی بدم به function
veniz2008
چهارشنبه 08 شهریور 1391, 01:11 صبح
سلام. تعریف و استفاده از function ها در محیط sql تا حدود بسیار زیادی شبیه sp هاست. یعنی شما دقیقا مثل sp ها باید از محیط ویژوال برای sql ، پارامتر بفرستید. من یک مثال از تابع میذارم تا بهتر متوجه بشید که چطور باید یک تابع ( function ) تعریف کنید( شما باید دو پارامتر num1@ که همون textbox1 و num2@ که textbox2 هست رو برای تابع بفرستید).
create FUNCTION zarb(@num1,@num2)
return int
as
begin
declare @total int
set @total = @num1 * @num2
return @total
end
zahra.mf
چهارشنبه 08 شهریور 1391, 01:15 صبح
سلام. تعریف و استفاده از function ها در محیط sql تا حدود بسیار زیادی شبیه sp هاست. یعنی شما دقیقا مثل sp ها باید از محیط ویژوال برای sql ، پارامتر بفرستید. من یک مثال از تابع میذارم تا بهتر متوجه بشید که چطور باید یک تابع ( function ) تعریف کنید( شما باید دو پارامتر num1@ که همون textbox1 و num2@ که textbox2 هست رو برای تابع بفرستید).
create FUNCTION zarb(@num1,@num2)
return int
as
begin
declare @total int
set @total = @num1 * @num2
return @total
end
من این تابع و نوشتم با فراخوانیش مشکل دارم چجوری ورودی بدم بهش سمت c#؟؟؟
veniz2008
چهارشنبه 08 شهریور 1391, 01:39 صبح
تا جایی که من اطلاع دارم نمیشه مستقیما تابع رو صدا زد. یه sp درست کنید و تابعی رو که نوشتید داخل این sp صدا بزنید. بصورت زیر( من الان به sqlدسترسی ندارم. تست کنید و جوابو اعلام کنید). حالا کافیه که درون سی شارپ این sp رو صدا بزنی و پارامترها رو براش بفرستی.
create proc zarb2
@num1 int,
@num2 int,
@total2 int output
as
set @total2 = dbo.zarb(@num1,@num2)
go
zahra.mf
چهارشنبه 08 شهریور 1391, 13:18 عصر
تا جایی که من اطلاع دارم نمیشه مستقیما تابع رو صدا زد. یه sp درست کنید و تابعی رو که نوشتید داخل این sp صدا بزنید. بصورت زیر( من الان به sqlدسترسی ندارم. تست کنید و جوابو اعلام کنید). حالا کافیه که درون سی شارپ این sp رو صدا بزنی و پارامترها رو براش بفرستی.
create proc zarb2
@num1 int,
@num2 int,
@total2 int output
as
set @total2 = dbo.zarb(@num1,@num2)
go
من این کار و کردم بعد فراخوانیش تو c# و اینجوری نوشتم
SqlCommand cmnd = new SqlCommand();
cmnd.Connection = con;
cmnd.CommandType = CommandType.StoredProcedure;
cmnd.CommandText = "dbo.zarb";
con.Open();
object obj = cmnd.ExecuteScalar();
int mult = (int)obj;
con.Close();
string srtcmnd = mult.ToString();
Convert.ToInt32(srtcmnd.ToString());
sql = @"insert into [faktor forush moshtari](moshtari_ID,gheymatekol,date,tedad)
values ({0},N'{1}',N'{2}',N'{3}')";
sql = string.Format(sql,
(textBox9.Text.Replace("'", "''")),
srtcmnd, PersianDate.Now.ToShortDateString().ToString(),
textBox12.Text.Replace("'", "''")
);
ولی اینجوری نمیدونم چجور مقدار textbox و بدم ورودی!!!:ناراحت:
zahra.mf
چهارشنبه 08 شهریور 1391, 21:34 عصر
استادم گفته باید با function انجام بدم:ناراحت:
این try و cash و ... چیه؟؟
hamidkh
چهارشنبه 08 شهریور 1391, 22:59 عصر
SqlCommand comm = new SqlCommand("dbo.MyFunction", conn);
comm.CommandType = CommandType.StoredProcedure;
SqlParameter p1 = new SqlParameter("@MyParam", SqlDbType.Int);
SqlParameter p2 = new SqlParameter("@Result", SqlDbType.Bit);
p1.Direction = ParameterDirection.Input;
p2.Direction = ParameterDirection.ReturnValue;
p1.Value = TextBox1.Text;
comm.Parameters.Add(p1);
comm.Parameters.Add(p2);
conn.Open();
comm.ExecuteNonQuery();
if (p2.Value != DBNull.Value)
res = (bool)p2.Value;
zahra.mf
پنج شنبه 09 شهریور 1391, 00:04 صبح
SqlCommand comm = new SqlCommand("dbo.MyFunction", conn);
comm.CommandType = CommandType.StoredProcedure;
SqlParameter p1 = new SqlParameter("@MyParam", SqlDbType.Int);
SqlParameter p2 = new SqlParameter("@Result", SqlDbType.Bit);
p1.Direction = ParameterDirection.Input;
p2.Direction = ParameterDirection.ReturnValue;
p1.Value = TextBox1.Text;
comm.Parameters.Add(p1);
comm.Parameters.Add(p2);
conn.Open();
comm.ExecuteNonQuery();
if (p2.Value != DBNull.Value)
res = (bool)p2.Value;
دو خط آخر یعنی چی؟؟
اگه بخوام خروجی و تو یه متغیر بریزم چجوریه؟؟؟
hamidkh
پنج شنبه 09 شهریور 1391, 00:16 صبح
این دو خط آخر خروجی رو میریزه توی متغیر res
zahra.mf
پنج شنبه 09 شهریور 1391, 00:48 صبح
myfunction اسم sp هست که تابع توش فراخوانی شده دیگه؟؟؟
یا اسم تابع؟؟؟
آخه خط بعدش نوشتید sp!!!!
hamidkh
پنج شنبه 09 شهریور 1391, 10:24 صبح
وقتی نوشتم myfunction منظورم اسم تابع اس کیو ال است. sp نیس.
zahra.mf
پنج شنبه 09 شهریور 1391, 10:37 صبح
من تابعی که نوشتم اینه
ALTER FUNCTION dbo.Function3
(
@a int,
@b int
)
RETURNS int
AS
BEGIN
declare @c int
set @c=@a*@b
RETURN @c
END
اینم کد فراخوانی
SqlCommand cmnd = new SqlCommand("dbo.Function3",con);
cmnd.CommandType = CommandType.StoredProcedure;
SqlParameter p1 = new SqlParameter("@a", SqlDbType.Int);
SqlParameter p2 = new SqlParameter("@b", SqlDbType.Int);
SqlParameter p3 = new SqlParameter("@c", SqlDbType.Int);
p1.Direction = ParameterDirection.Input;
p2.Direction = ParameterDirection.Input;
p3.Direction = ParameterDirection.ReturnValue;
p1.Value = textBox11.Text;
p2.Value = textBox12.Text;
cmnd.Parameters.Add(p1);
cmnd.Parameters.Add(p2);
cmnd.Parameters.Add(p3);
con.Open();
cmnd.ExecuteNonQuery();
int res = (int)p3.Value;
ولی داره به
cmnd.ExecuteNonQuery();
گیر میده میگه
Failed to convert parameter value from a String to a Int32.
:گریه:
hamidkh
پنج شنبه 09 شهریور 1391, 11:13 صبح
مطمئنین که خطا میده؟من تست کردم ولی خطا نداد
zahra.mf
پنج شنبه 09 شهریور 1391, 11:17 صبح
آره موقع اجرا این خطا رو میده به اون خط!!!:گریه:
تابع همینجوری که من نوشتم تست کردید؟!!!
hamidkh
پنج شنبه 09 شهریور 1391, 11:25 صبح
همه چیز رو همونطور که شما نوشتید تست کردم
تابعتون رو از چه نوعی ایجاد کردین؟از نوع Scalre-valued function بنویسید.خود تابع رو هم توی محیط اس کیو ال تست کنید که جواب بده.
zahra.mf
پنج شنبه 09 شهریور 1391, 12:50 عصر
همه چیز رو همونطور که شما نوشتید تست کردم
تابعتون رو از چه نوعی ایجاد کردین؟از نوع Scalre-valued function بنویسید.خود تابع رو هم توی محیط اس کیو ال تست کنید که جواب بده.
همین کار و کردم من:گریه:
hamidkh
پنج شنبه 09 شهریور 1391, 12:58 عصر
من دیگه نمیدونم چه بگم.اگه میتونید پروژه تون رو بذارید ببینیم مشکلش چیه.
zahra.mf
پنج شنبه 09 شهریور 1391, 12:59 عصر
من دیگه نمیدونم چه بگم.اگه میتونید پروژه تون رو بذارید ببینیم مشکلش چیه.
میلتون و بدید من آپلود میکنم لینکش و میدم بهتون
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.