이상한 것입니다. 나는 그것에 저장된 proc가있는 Dev SQL Server를 가지고 있으며, UAT DB에서 같은 코드와 함께 사용하면 동일한 저장된 proc 파일이 삭제됩니다.저장된 프로 시저의 ExecuteNonQuery가 해당 프로 시저를 삭제하도록합니다.
아무도이 동작을 들었습니까?
SQL 코드 :
-- Check if user is registered with the system
IF OBJECT_ID('dbo.sp_is_valid_user') IS NOT NULL
BEGIN
DROP PROCEDURE dbo.sp_is_valid_user
IF OBJECT_ID('dbo.sp_is_valid_user') IS NOT NULL
PRINT '<<< FAILED DROPPING PROCEDURE dbo.sp_is_valid_user >>>'
ELSE
PRINT '<<< DROPPED PROCEDURE dbo.sp_is_valid_user >>>'
END
go
create procedure dbo.sp_is_valid_user
@username as varchar(20),
@isvalid as int OUTPUT
AS
BEGIN
declare @tmpuser as varchar(20)
select @tmpuser = username from CPUserData where username = @username
if @tmpuser = @username
BEGIN
select @isvalid = 1
END
else
BEGIN
select @isvalid = 0
END
END
GO
사용 예
DECLARE @isvalid int
exec dbo.sp_is_valid_user 'username', @isvalid OUTPUT
SELECT valid = @isvalid
사용법 예제 일 하루 종일 ... 나는 C#을 통해 액세스 할 때는 UAT SQL DB에 있지만 자체 삭제 데브 원 !!
C# 코드는 :
public bool IsValidUser(string sUsername, ref string sErrMsg)
{
string sDBConn = ConfigurationSettings.AppSettings["StoredProcDBConnection"];
SqlCommand sqlcmd = new SqlCommand();
SqlDataAdapter sqlAdapter = new SqlDataAdapter();
try
{
SqlConnection conn = new SqlConnection(sDBConn);
sqlcmd.Connection = conn;
conn.Open();
sqlcmd.CommandType = CommandType.StoredProcedure;
sqlcmd.CommandText = "sp_is_valid_user";
// params to pass in
sqlcmd.Parameters.AddWithValue("@username", sUsername);
// param for checking success passed back out
sqlcmd.Parameters.Add("@isvalid", SqlDbType.Int);
sqlcmd.Parameters["@isvalid"].Direction = ParameterDirection.Output;
sqlcmd.ExecuteNonQuery();
int nIsValid = (int)sqlcmd.Parameters["@isvalid"].Value;
if (nIsValid == 1)
{
conn.Close();
sErrMsg = "User Valid";
return true;
}
else
{
conn.Close();
sErrMsg = "Username : " + sUsername + " not found.";
return false;
}
}
catch (Exception e)
{
sErrMsg = "Error :" + e.Source + " msg: " + e.Message;
return false;
}
}
당신이 사용하는 예제가 다른 proc "sp_is_user_admin"을 C# 코드보다 호출하고 있습니다. 또한 C#의 USING 키워드를 조사하고 싶을 수도 있습니다. 이 코드는 모든 곳에서 연결을 유출 할 수 있습니다. – NotMe
당신의 절차는 "set @isvalid = 0; CPUserData에서 @isvalid = 1을 선택하십시오. username = @username;을 선택하십시오." 따라서 임시 변수가 필요하지 않습니다. 또한 conn.Close()를 finally 블록으로 이동하는 것을 고려하십시오. – Sorpigal
@ 크리스 .. 나는 방금 sp_is_valid_user, 고마워 .. 변경했습니다. 슬프게도 문제가 해결되지 않습니다. ( – FinancialRadDeveloper