2016-07-29 2 views
0

SQL Server Management Studio에서 실행하면 저장 프로 시저가 제대로 실행됩니다. C#을 (윈폼) 나는 다음과 같은 코드가에서값이 지정되지 않은 저장 프로 시저의 값이 전달됩니다.

:

InsertWarning.Parameters.AddWithValue("@idUser", userIDAuth); 
InsertWarning.Parameters.AddWithValue("@idPass", idPass); 

if (Privileged) 
    MessageWarning += " gave you privileged access to note " + Description; 
else 
    MessageWarning += " gave you access to note " + Description; 

InsertWarning.Parameters.AddWithValue("@Message", MessageWarning); 
InsertWarning.ExecuteNonQuery(); 
InsertWarning.Parameters.Clear(); 

ExecuteNonQuery()이는 @idUser 값이없는 말을 중지 실행됩니다.

idUser being given a value

enter image description here

C#에서

저장 프로 시저 : SQL에서

SqlCommand InsertWarning = new SqlCommand("_spInsertWarnings", TeamPWSecureBD); 

InsertAuths.CommandType = CommandType.StoredProcedure; 

저장 프로 시저 :

[dbo].[_spInsertWarnings] 
    @idUser int, @idPass int, @Message nvarchar(MAX) 
AS 
    INSERT INTO Warnings 
    VALUES(@idUser, @idPass, @Message) 
+0

원본 게시물의 형식에 따라, 이것이 논리 분기의 일부인 것처럼 보입니다. 이 proc가 호출되는 다른 곳이 있습니까? 또한 저장 프로 시저에서'@idUser' 데이터 타입은 무엇입니까? 당신은 또한 저장된 proc 헤더를 게시 할 수 있습니까? –

+1

저장 프로 시저를 실행할 때 SQL 프로필러에 표시되는 내용은 무엇입니까? –

+0

// 추가 위에 Clear 메서드를 넣을 수 있습니까? 그리고 다시 시도하십시오? InsertWarning.Parameters.Clear(); InsertWarning.Parameters.AddWithValue ("@ idUser", userIDAuth); InsertWarning.Parameters.AddWithValue ("@ idPass", idPass); 경우 (권한) MessageWarning + = + 설명 "당신이주의해야 할 접근 권한을 주었다"; else MessageWarning + = "메모에 액세스 권한을 부여했습니다."+ 설명; InsertWarning.Parameters.AddWithValue ("@ 메시지", MessageWarning); InsertWarning.ExecuteNonQuery(); – sarathkumar

답변

0

다시 생각해 보면, @idUser와 다른 매개 변수가 누락되어 있고 해당 매개 변수에 기본값이 지정되어 있지 않습니다. 때때로 SQL Server는 값이 누락 된 매개 변수에 대해 잘못된 이름을보고합니다.

당신 시저 헤더를보고 당신이 PROC 당신이 항상 통과하고 싶지 않은 것들에 대한 할당 된 의미있는 디폴트이 있거나 것으로 예상 필요한 모든 매개 변수를 전달하고 있는지 확인합니다.

+0

Question 편집 된 – walkman

+0

고마워! 그래서, 사실, 지금은 누락 된 데이터 형식이 문제가 아닌지 궁금하네요. @sarathkumar가 제안하는 것을 시도 할 것입니다. 명시 적으로 데이터 유형을 전달하는지 확인하십시오. 위 @ sarathkumar의 예에서 –

+0

봐'InsertWarning.Parameters.Add ('@의 idUser', SqlDbType.Int).Value = userIdAuth; ' –

1
using (SqlConnection con = new SqlConnection(dc.Con)) 
{ 
    using (SqlCommand cmd = new SqlCommand("_spInsertwarnings", con)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 

//Please Make SqlDataType as per your Sql ColumnType 
     cmd.Parameters.Add("@idUser", SqlDbType.VarChar).Value = userIDAuth; 
     cmd.Parameters.Add("@idPass", SqlDbType.VarChar).Value = idPass; 


     con.Open(); 
     cmd.ExecuteNonQuery(); 
    } 
    } 
0

나는이 코드가 작동하는 것 같아 추가하는 곳의 코드를 게시했습니다.

InsertWarning.Parameters.Add("@idUser", SqlDbType.Int); 
    InsertWarning.Parameters["@idUser"].Value = userIDAuth; 
    InsertWarning.Parameters.AddWithValue("@idPass", idPass); 
    try 
    { 
     connection.Open(); 
     InsertWarning.ExecuteNonQuery() 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    }