PDA

View Full Version : سوال: function



baran.f.a
پنج شنبه 09 بهمن 1393, 08:53 صبح
سلام من فرمی طراحی کردم که می خوام داده های اونو در دیتابیسم ذخیره کنم اما قبل از insert باید شناسه یکی از قسمت های فرممو که یه dropdownlist هست را از دیتابیسم بخونم به خاطر همین یه function رو فراخوانی کردم که این کارو انجام بده من به این مقداری که تابعم برمی گردونه برای insert احتیاج دارم functionیه مقداری رو برمی گردنه ولی نمی تونم اطلاعات برگشته رو insert کنم .خطایی که می ده اینه :

Conversion failed when converting the varchar value 'id' to data type int.

کدم :

protected void Button1_Click(object sender, EventArgs e)
{
string connectionString = "Data Source=(local);Initial Catalog=company;Integrated Security=SSPI;";
SqlConnection conObj = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand("select dbo.SearchId(@title)", conObj);
cmd.CommandType = CommandType.Text;


SqlParameter parm = new SqlParameter("@r", SqlDbType.Int);

parm.Direction = ParameterDirection.ReturnValue;


cmd.Parameters.Add(parm);
cmd.Parameters.Add(new SqlParameter("@title", DropDownList1.SelectedValue));



conObj.Open();
cmd.ExecuteNonQuery();
if (parm.Value is DBNull)
{
Label2.Text = "empty";
}
else
{


int id = Convert.ToInt32(parm.Value);


}


SqlCommand command = new SqlCommand("Insert into Pay_PayrollFactor (Pay_PfId,Pay_PfParentId_fk,Pay_PfName,Pay_PfDescr yption) values (8, 'id' ,'" +DropDownList1.SelectedValue + "','"+DropDownList1.SelectedValue + '/' +txttitle.Text+"')", conObj);

command.ExecuteNonQuery();




conObj.Close();
}



}


function :




CREATE FUNCTION SearchId
(
@title nvarchar
)
RETURNS int
AS
BEGIN
DECLARE @r int
set @r=
(select Pay_PfId
from Pay_PayrollFactor
where Pay_PfName = @title)


RETURN @r


END






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

neda555
پنج شنبه 09 بهمن 1393, 12:18 عصر
سلام احتمالا تابعتون null برمیگردونه مقدار id رو با breakpoint چک کنید

baran.f.a
پنج شنبه 09 بهمن 1393, 14:22 عصر
سلام احتمالا تابعتون null برمیگردونه مقدار id رو با breakpoint چک کنید

سلام نه مقدار null رو برنمی گردونه من این شرط و تو کدام آوردم خط 21

baran.f.a
پنج شنبه 09 بهمن 1393, 16:09 عصر
کسی نمی تونه راهنمایی کنه ؟

aslan
پنج شنبه 09 بهمن 1393, 17:19 عصر
سلام
در دستور Insert تک کوتئشن قبل و بعد از id را حذف کنید و با استفاده از + کوئری را اصلاح کنید ..........
موفق باشید

baran.f.a
پنج شنبه 09 بهمن 1393, 17:34 عصر
سلام
در دستور Insert تک کوتئشن قبل و بعد از id را حذف کنید و با استفاده از + کوئری را اصلاح کنید ..........
موفق باشید

منظورتون به صورت زیره :

SqlCommand command = new SqlCommand("Insert into Pay_PayrollFactor (Pay_PfParentId_fk,Pay_PfName,Pay_PfDescryption) values ( +id ,'" +DropDownList1.SelectedValue + "','"+DropDownList1.SelectedValue + '/' +txttitle.Text+"')", conObj);


این کارو انجام دادم خطای (Invalid column name 'id'.) رو میده .

aslan
پنج شنبه 09 بهمن 1393, 17:48 عصر
values ( "+id +",'" +DropDownList1.SelectedValue

baran.f.a
پنج شنبه 09 بهمن 1393, 18:05 عصر
values ( "+id +",'" +DropDownList1.SelectedValue



Compiler Error Message: CS0103: The name 'id' does not exist in the current context

aslan
پنج شنبه 09 بهمن 1393, 18:23 عصر
سلام
شما ظاهرا کدهاتون را تغییر دادین ... کد پست شماره 1 با 6 مغایرت داره
در آخرین کدی که قرار دادین در واقع شما میخواین 3 فیلد از جدول Pay_PayrollFactor را با 4 متغیر جایگزین کنید ؟؟؟!!!!!
..... یک توصیه :
کد Insert را اصلاح کنید .... دستور شرطی قبل از اینزرت را در نظر نگیرید و بعد از بلوک IF متغیر id را با یک عدد ثابت فرضی پر کنید .... تا از صحت کارکرد کوئری insert نوشته شده مطمئن بشید و ......

اگر باز هم اشکالی بود بهتره دوباره آخرین کدهاتون را اینجا قرار بدین
موفق باشید

baran.f.a
پنج شنبه 09 بهمن 1393, 18:25 عصر
سلام
شما ظاهرا کدهاتون را تغییر دادین ... کد پست شماره 1 با 6 مغایرت داره
در آخرین کدی که قرار دادین در واقع شما میخواین 3 فیلد از جدول Pay_PayrollFactor را با 4 متغیر جایگزین کنید ؟؟؟!!!!!
..... یک توصیه :
کد Insert را اصلاح کنید .... دستور شرطی قبل از اینزرت را در نظر نگیرید و بعد از بلوک IF متغیر id را با یک عدد ثابت فرضی پر کنید .... تا از صحت کوئری insert نوشته شده مطمئن بشید و ......

اگر باز هم اشکالی بود بهتره دوباره آخرین کدهاتون را اینجا قرار بدین
موفق باشید


بله حق باشماست و کد رو به صورت زیر تغییر دادم .

cmd.ExecuteNonQuery();
if (parm.Value is DBNull)
{
Label2.Text = "empty";
}



SqlCommand command = new SqlCommand("Insert into Pay_PayrollFactor (Pay_PfParentId_fk,Pay_PfName,Pay_PfDescryption) values ( " + (parm.Value) + " ,'" + DropDownList1.SelectedValue + "','" + DropDownList1.SelectedValue + '/' + txttitle.Text + "')", conObj);




مشکل حل شد. ممنون

baran.f.a
پنج شنبه 09 بهمن 1393, 20:43 عصر
128020

می خوام شناسه Pay_PfId رو برگردونه.

aslan
جمعه 10 بهمن 1393, 00:12 صبح
128020

می خوام شناسه Pay_PfId رو برگردونه.

از کدهای زیر استفاده کنید :




Create PROCEDURE [dbo].[Proc_SearchId]
@name NVARCHAR(100),
@OutputParam INT OUTPUT
AS
BEGIN
select @OutputParam=Pay_PfId
from Pay_PayrollFactor
where Pay_PfName = LTRIM(RTRIM((@name)))
RETURN 1
END

.....
protected void Button1_Click(object sender, EventArgs e)
{
string connectionString = "Data Source=(local);Initial Catalog=company;Integrated Security=SSPI;";
SqlConnection conObj = new SqlConnection(connectionString);
conObj.Open();
using (SqlCommand cmd = new SqlCommand())
{


cmd.Connection = conObj;
cmd.CommandText = "Proc_SearchId";
cmd.CommandType = CommandType.StoredProcedure;

// Set Sql Input Parameter
SqlParameter oParam = new SqlParameter("@name", DropDownList1.SelectedValue);
oParam.SqlDbType = SqlDbType.NVarChar;
cmd.Parameters.Add(oParam);

// Set Sql Output Paramater
SqlParameter OutputParam = new SqlParameter("@OutputParam", SqlDbType.Int);
OutputParam.Direction = ParameterDirection.Output;
cmd.Parameters.Add(OutputParam);

cmd.ExecuteNonQuery();

lblMsg.Text = OutputParam.Value.ToString();

//دستور شرطی زیر را بر اساس نیازتون تغییر بدین
if(!string.IsNullOrEmpty(lblMsg.Text))
{
// کدهای اینزرت را اینجا بنویسید
//cmd.CommandText = " Insert ...............";
//cmd.CommandType = CommandType.Text;
//cmd.ExecuteNonQuery();
}
}
}




در ضمن بنظر میاد اگر ارتباطی بین جدولی که dropdownlist با اون پر میشه با جدولی که search میشه وجود داشته باشه ( که باید داشته باشه ) نیازی به اینهمه کد نبود و راه حل بهتر و ساده تری داشت و ....................

موفق باشید