PDA

View Full Version : سوال: پارامترها در اسکیوال طوری تعریف بشن که اگه از برنامه مقدار ارسال نشدنال یا یه مقدار پیش فرض بگیرند؟



shocraneh
یک شنبه 29 خرداد 1390, 07:39 صبح
باید از دات نت برای تمام پارامترهای پروسیجر مقدار ارسال کنیم .
نمیشه طوری پارامترها در اسکیوال تعریف بشن که اگه مقدار ارسال نشد
نال یا یه مقدار پیش فرض بگیرند؟
البته منظورم این نیست
@Name nvarchar(50)=''

AAtoZZ
یک شنبه 29 خرداد 1390, 17:43 عصر
این سوال باید تو بخش SQL پرسیده میشد.
یک مثال براتون نوشتم.


CREATE PROCEDURE [dbo].[SampleSp]
@DateStart DATETIME,
@DateEnd DATETIME = '1901-01-01'

AS
IF @DateEnd = '1901-01-01'
SET @DateEnd = GETDATE()

create table #Report ( [PersonalID] INT,
[FirstName] nvarchar(250),
[LastName] nvarchar(250),
[BirthDate] DATETIME)

INSERT INTO #Report
(
PersonalID,
FirstName,
LastName,
BirthDate
)
SELECT PersonalID, FirstName, LastName, BirthDate
FROM tblEmployee
WHERE BirthDate >= @DateStart AND @DateEnd >= @DateEnd

select * from #Report

shocraneh
سه شنبه 31 خرداد 1390, 12:06 عصر
به گمانم منظورم رو درست منتقل نکردم . من یه پروسیجر دارم

ALTER Procedure [dbo].[Agent]
@value bigint,
@Code smallint ,
@Name nvarchar(50),
@LastName nvarchar(50) ,
@Tel nvarchar(11),
@Mobile nvarchar(11),
@Address nvarchar(500),
@IsActive bit

As
Begin

if @value=1 /**[Tbl_Insert]**/
Insert Into Tbl_Agent
([Name],[LastName], [Tel],[Mobile],[Address],[IsActive])
Values
(@Name,@LastName,@Tel,@Mobile,@Address,@IsActive );

if @value=3 /**[Tbl_DeleteRow]**/
Delete Tbl_Agent
Where [Agent_Code] = @Code;
حالا در کدنویسی به این شکل

public void AddToDb(ItemWH item1)
{
SqlCommand Cmd = new SqlCommand("Agent", DALBase.GetConnectionString());
Cmd.CommandType = CommandType.StoredProcedure;

Cmd.Parameters.Add("@value", SqlDbType.BigInt).Value = 1;
Cmd.Parameters.Add("@Code", SqlDbType.SmallInt ).Value = 0;
Cmd.Parameters.Add("@Name", SqlDbType.NVarChar).Value = item1.Name;
Cmd.Parameters.Add("@LastName", SqlDbType.NVarChar).Value = item1.LastName;
Cmd.Parameters.Add("@Tel", SqlDbType.NVarChar).Value = item1.Tel;
Cmd.Parameters.Add("@Mobile", SqlDbType.NVarChar).Value = item1.Managment ;
Cmd.Parameters.Add("@Address", SqlDbType.NVarChar).Value = item1.Address ;
Cmd.Parameters.Add("@IsActive", SqlDbType.Bit ).Value = item1.Active ;
Cmd.ExecuteNonQuery();
}

public void Del(string Code)
{
SqlCommand Cmd = new SqlCommand("Agent", DALBase.GetConnectionString());
Cmd.CommandType = CommandType.StoredProcedure;
Cmd.Parameters.Add("@value", SqlDbType.BigInt).Value = 3;
Cmd.Parameters.Add("@Code", SqlDbType.SmallInt).Value = Code ;
Cmd.Parameters.Add("@Name", SqlDbType.NVarChar).Value = "";
Cmd.Parameters.Add("@LastName", SqlDbType.NVarChar).Value = "";
Cmd.Parameters.Add("@Tel", SqlDbType.NVarChar).Value = "";
Cmd.Parameters.Add("@Mobile", SqlDbType.NVarChar).Value = "";
Cmd.Parameters.Add("@Address", SqlDbType.NVarChar).Value = "";
Cmd.Parameters.Add("@IsActive", SqlDbType.Char ).Value = "";
Cmd.ExecuteNonQuery();

}


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

@Name nvarchar(50)=''

AAtoZZ
پنج شنبه 02 تیر 1390, 11:49 صبح
اگر به این شکل

@DateEnd DATETIME = '1901-01-01'

برای یک ورودی مقدار Default تعیین کرده باشید لزومی نداره مقداری برای اون ورودی به SP بفرستید.

shocraneh
شنبه 04 تیر 1390, 11:11 صبح
من با استفاده از اسکریپت های اسکیوال در دات نت ،بانکم رو به شکل اتومات رو سیستم کاربر اتچ می کنم .اگه پیش فرض بدم خطا میده ( به خاطر این روش)