programing

SqlParameter 이름 앞에 @를 추가해야 합니까?

oldcodes 2023. 5. 14. 11:04
반응형

SqlParameter 이름 앞에 @를 추가해야 합니까?

응용 프로그램 중 하나에서 매개 변수는 다음과 같은 방식으로 저장 프로시저에 전달되었습니다.

Dim parm As New SqlParameter("searchText", SqlDbType.VarChar)
parm.Direction = ParameterDirection.Input
parm.Size = 50
parm.Value="test"

cmd.Parameters.Add(parm)

절차에는 다음과 같은 매개 변수가 포함됩니다.@searchText

즉, 코드에서 전달된 매개 변수 이름은searchText저장 프로시저에 있는 것은@searchText.

하지만 제대로 작동하고 있어요, 항상 필요한 결과를 얻고 있어요.

그래서 제 질문은 파라미터 앞에 @를 지정할 필요가 없다는 것입니까?@를 추가할지 여부에 대해 누구나 이에 대한 답변을 해줄 수 있습니까?

설명서에 따르면 이름은 다음으로 시작해야 합니다.@:

매개 변수 이름은 @paramname 형식으로 지정됩니다.

소스 코드에 따라(및 참조 소스를 살펴봄),@필요한 경우 자동으로 추가됩니다.

네, 효과는 있지만, 문서화되지 않은 기능입니다.이에 의존하지 말고 수동으로 매개 변수 이름 앞에 다음과 같이 입력하는 것이 좋습니다.@.

참조: SqlParameter.매개 변수 이름 속성 및 IDdata 매개 변수입니다.매개 변수 이름 속성

매개 변수 이름은 @paramname 형식으로 지정됩니다.매개 변수에 의존하는 SQL 명령을 실행하기 전에 매개 변수 이름을 설정해야 합니다.SQL 서버를 데이터베이스로 사용하는 경우 매개 변수 이름 앞에 @를 지정해야 합니다.

매개 변수 이름은 백엔드와 동일해야 합니다. 예를 들어,@searchText그런 다음 매개 변수 사양에서 다음과 같아야 합니다.SqlParameter("@searchText"..

당신의 코드는 다음과 같아야 합니다.

Dim parm As New SqlParameter("@searchText", SqlDbType.VarChar)
parm.Direction = ParameterDirection.Input
parm.Size = 50
parm.Value="test"

cmd.Parameters.Add(parm)

참고: Oracle과 SqLite는 매개 변수를 지정하기 위해 서로 다른 사용 문자를 사용하며 ado.net 사양에서 지정한 @ 기호가 사용되지 않을 수 있습니다.

편집: 주석별

링크를 지정한 것처럼 링크도 일종의 수정이지만 msdn 설명서에 따르면 데이터 공급자 oledb, sql, odbc 중 하나를 사용하는지 여부에 따라 위치 매개 변수를 '@'로 지정해야 합니다.참조

if (0 < parameterName.get_Length() && '@' != parameterName.get_Chars(0))
        {
            parameterName = "@" + parameterName;
        }

@를 지정할 필요는 없습니다.하지만, 이것은 최선의 방법입니다.

그것은 현악기와 유사합니다.문자열을 에서와 같이 정의해도 아무런 문제가 없습니다.NET:

string s;
//Rest of the code follows;

그러나 다음과 같이 정의하는 것이 좋습니다.

string s = string.Empty;

아시다시피, 그것은 관례와 모범 사례의 문제입니다!!!

매개 변수 이름에 "@" 마커를 추가하는 것이 좋습니다.SqlParameter는 자동으로 추가하는 데 도움이 되지만 다른 사용자의 매개 변수는 그렇지 않을 수 있습니다.

"@" 기호가 필요합니까?한마디로 이야기할 수 없군요.DbCommand를 사용하여 매개 변수를 추가하는 경우 SQL Server 사용 여부에 관계없이 선택 사항입니다.

// Look Ma no @ required!    
DbCommand command = database.GetStoredProcCommand("StoredProctologistAndGambler");
database.AddInParameter(command, "Bet", DbType.Int32, fromLineNumber);
database.AddOutParameter(command, "Diagnosis", DbType.String, -1);

그러나 나중에 명령을 참조하려면 "@" 접두사가 필요합니다.마이크로소프트는 이를 API의 나머지 부분으로 옮기는 것이 너무 어렵다고 판단했습니다.

var examResult =  command.Parameters["@Diagnosis"];   // Ma! Microsoft lied! It requires the "@" prefix.

언급URL : https://stackoverflow.com/questions/10245510/is-it-necessary-to-add-a-in-front-of-an-sqlparameter-name

반응형