PDA

View Full Version : سوال: textbox به عنوان ورودی function



zahra.mf
سه شنبه 07 شهریور 1391, 22:57 عصر
سلام من یه تابع از نوع Scalar-valued function در sql نوشتم ورودی این تابع 2 تا textbox هست که مقداراشون توی این تابع در هم ضرب میشه و خروجیش باید توی یه جدول اینسرت کنم هم ورودیا و هم خروجی همه از نوع int هستن نمیدونم چه جور باید textbox به عنوان ورودی بدم به function

veniz2008
چهارشنبه 08 شهریور 1391, 00: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, 00: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, 00: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, 12: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, 20:34 عصر
استادم گفته باید با function انجام بدم:ناراحت:
این try و cash و ... چیه؟؟

hamidkh
چهارشنبه 08 شهریور 1391, 21: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
چهارشنبه 08 شهریور 1391, 23: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
چهارشنبه 08 شهریور 1391, 23:16 عصر
این دو خط آخر خروجی رو میریزه توی متغیر res

zahra.mf
چهارشنبه 08 شهریور 1391, 23:48 عصر
myfunction اسم sp هست که تابع توش فراخوانی شده دیگه؟؟؟
یا اسم تابع؟؟؟
آخه خط بعدش نوشتید sp!!!!

hamidkh
پنج شنبه 09 شهریور 1391, 09:24 صبح
وقتی نوشتم myfunction منظورم اسم تابع اس کیو ال است. sp نیس.

zahra.mf
پنج شنبه 09 شهریور 1391, 09: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, 10:13 صبح
مطمئنین که خطا میده؟من تست کردم ولی خطا نداد

zahra.mf
پنج شنبه 09 شهریور 1391, 10:17 صبح
آره موقع اجرا این خطا رو میده به اون خط!!!:گریه:
تابع همینجوری که من نوشتم تست کردید؟!!!

hamidkh
پنج شنبه 09 شهریور 1391, 10:25 صبح
همه چیز رو همونطور که شما نوشتید تست کردم
تابعتون رو از چه نوعی ایجاد کردین؟از نوع Scalre-valued function بنویسید.خود تابع رو هم توی محیط اس کیو ال تست کنید که جواب بده.

zahra.mf
پنج شنبه 09 شهریور 1391, 11:50 صبح
همه چیز رو همونطور که شما نوشتید تست کردم
تابعتون رو از چه نوعی ایجاد کردین؟از نوع Scalre-valued function بنویسید.خود تابع رو هم توی محیط اس کیو ال تست کنید که جواب بده.

همین کار و کردم من:گریه:

hamidkh
پنج شنبه 09 شهریور 1391, 11:58 صبح
من دیگه نمیدونم چه بگم.اگه میتونید پروژه تون رو بذارید ببینیم مشکلش چیه.

zahra.mf
پنج شنبه 09 شهریور 1391, 11:59 صبح
من دیگه نمیدونم چه بگم.اگه میتونید پروژه تون رو بذارید ببینیم مشکلش چیه.

میلتون و بدید من آپلود میکنم لینکش و میدم بهتون