2013-06-28 6 views
1

이 오류가 있습니다 : "@Login"스칼라 변수를 선언해야합니다."@Login"스칼라 변수를 선언해야합니다.

내 코드 :

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["intranetv2"].ConnectionString)) 
{ 

    SqlCommand cmd = new SqlCommand("insert into [MyBase].[Dbo].[LogErrors] (Username, StackTrace, ShortDescription, DetailDescription, ErrorType) VALUES (@Login, @Stack, @Message, @Txt, @Source)", conn); 

       SqlParameter param = new SqlParameter(); 
       param.ParameterName = "Login"; 
       param.Value = user.Login; 
       param.ParameterName = "Stack"; 
       param.Value = ex.StackTrace; 
       param.ParameterName = "Message"; 
       param.Value = ex.Message; 
       param.ParameterName = "Txt"; 
       param.Value = Txt; 
       param.ParameterName = "Source"; 
       param.Value = ex.Source; 
       // 3. add new parameter to command object 
       cmd.Parameters.Add(param); 
       conn.Open(); 
       return cmd.ExecuteNonQuery(); 
} 

나는 PARAM에 '@'일 전자와 시도했지만 내가 같은 오류가 있습니다.

+0

'로그인'을 매개 변수 이름으로 추가하려고하지 않습니다. 매개 변수 이름이 '원본'일 때까지 덮어 씁니다. –

답변

2

당신은 각 매개 변수에 대한 새로운 SqlParameter에를 작성해야합니다, 그것은 다음과 같이해야합니다 :

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["intranetv2"].ConnectionString)) 
{ 

    SqlCommand cmd = new SqlCommand("insert into [MyBase].[Dbo].[LogErrors] (Username, StackTrace, ShortDescription, DetailDescription, ErrorType) VALUES (@Login, @Stack, @Message, @Txt, @Source)", conn); 

       SqlParameter param = new SqlParameter(); 
       param.ParameterName = "@Login"; 
       param.Value = user.Login; 
       cmd.Parameters.Add(param); 

       SqlParameter param2 = new SqlParameter(); 
       param2.ParameterName = "@Stack"; 
       param2.Value = ex.StackTrace; 
       cmd.Parameters.Add(param2); 
    (...) 
2

params 값을 덮어 쓰고 하나의 매개 변수 만 쿼리에 추가합니다. 어느입니다 Source

새 변수를 만들거나 AddWithValue을 사용하는 것이 좋습니다.

SqlParameter param = new SqlParameter(); 
    param.ParameterName = "Login"; 
    param.Value = user.Login; 

    cmd.Parameters.Add(param); 

    SqlParameter param2 = new SqlParameter(); 
    param2.ParameterName = "Stack"; 
    param2.Value = ex.StackTrace; 

    cmd.Parameters.Add(param2); 

당신이 할 수있는 AddWithValue를 사용하려면

cmd.Parameters.AddWithValue("@Login", user.Login); 
cmd.Parameters.AddWithValue("@Stack", ex.StackTrace); 
+1

사실, 동일한 매개 변수 개체를 다시 사용하기 때문에 실제로 도움이되지 않습니다. cmd.Parameters.Add에 대한 두 번째 호출은 해당 매개 변수가 이미 있으므로 예외를 throw합니다. 틀 렸으면 고쳐줘. – saamorim

+0

@saamorim - 내 머리 꼭대기에서 나는 100 % 확실하지 않습니다.그러나 별도의 변수를 포함하도록 내 대답을 조정했습니다. –

+0

작동하지 않습니다. "Param은 이미 cmd를 알고 있습니다"라는 SQL 예외. 각 매개 변수에 대해 새 Sqlparameter 개체를 선언해야합니다. – Portekoi

0

는 당신은 매개 변수 목록에 마지막 매개 변수를 추가했습니다.

더 나은이 될 것입니다 : 모든 매개 변수에 대한 같은 매개 변수 인스턴스를 재사용하는

SqlParameter param = new SqlParameter(); 
param.ParameterName = "@Login"; 
param.Value = user.Login; 
cmd.Parameters.Add(param); 

param = new SqlParameter(); 
param.ParameterName = "@Stack"; 
param.Value = ex.StackTrace; 
cmd.Parameters.Add(param); 

param = new SqlParameter(); 
param.ParameterName = "@Message"; 
param.Value = ex.Message; 
cmd.Parameters.Add(param); 

param = new SqlParameter(); 
param.ParameterName = "@Txt"; 
param.Value = Txt; 
cmd.Parameters.Add(param); 

param = new SqlParameter(); 
param.ParameterName = "@Source"; 
param.Value = ex.Source; 
cmd.Parameters.Add(param); 

conn.Open(); 
return cmd.ExecuteNonQuery(); 
0

. 그것은 틀린 말입니다. @는 이름의 일부임을

cmd.Parameters.AddWithValue("@Login", user.Login); 

주, 그래서 너무 여기를 사용

쉬운 방법 대신 addWithValue 방법을 사용하는 것입니다.

0

작은 실수 있습니다. 여기에서 문제는 당신이 지속적 만 맨 마지막 버전을 추가, 'PARAM'의 값을 변경하고 있다는 것입니다 코드

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["intranetv2"].ConnectionString)) 
{ 

    SqlCommand cmd = new SqlCommand("insert into [MyBase].[Dbo].[LogErrors] (Username, StackTrace, ShortDescription, DetailDescription, ErrorType) VALUES (@Login, @Stack, @Message, @Txt, @Source)", conn); 

      SqlParameter param = new SqlParameter(); 
      param.ParameterName = "@Login"; 
      param.Value = user.Login; 
      cmd.Parameters.Add(param); 

      SqlParameter param2 = new SqlParameter(); 
      param2 .ParameterName = "@Stack"; 
      param2 .Value = ex.StackTrace; 
      cmd.Parameters.Add(param2); 

      SqlParameter param3 = new SqlParameter(); 
      param3.ParameterName = "@Message"; 
      param3.Value = ex.Message; 
      cmd.Parameters.Add(param3); 

      SqlParameter param4 = new SqlParameter(); 
      param4.ParameterName = "@Txt"; 
      param4.Value = Txt; 
      cmd.Parameters.Add(param4); 

      SqlParameter param5 = new SqlParameter(); 
      param5.ParameterName = "@Source"; 
      param5.Value = ex.Source; 
      cmd.Parameters.Add(param5); 

      conn.Open(); 
      return cmd.ExecuteNonQuery(); 

}

감사

0

정류된다.

는 대신 다음보십시오 :

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["intranetv2"].ConnectionString)) 
{ 
    SqlCommand cmd = new SqlCommand("insert into [MyBase].[Dbo].[LogErrors] (Username, StackTrace, ShortDescription, DetailDescription, ErrorType) VALUES (@Login, @Stack, @Message, @Txt, @Source)", conn); 

    cmd.Parameters.Add(new SqlParameter() { ParameterName = "@Login", Value = user.Login }); 
    cmd.Parameters.Add(new SqlParameter() { ParameterName = "@Stack", Value = ex.StackTrace }); 
    cmd.Parameters.Add(new SqlParameter() { ParameterName = "@Message", Value = ex.Message}); 
    cmd.Parameters.Add(new SqlParameter() { ParameterName = "@Txt", Value = Txt }); 
    cmd.Parameters.Add(new SqlParameter() { ParameterName = "@Source", Value = ex.Source}); 

    conn.Open(); 
    return cmd.ExecuteNonQuery(); 
} 
1

당신이 그것에 대해가는 방법, 마지막 매개 변수가 추가지고 있습니다. 명령 객체에 매개 변수를 추가하는 몇 가지 방법이 있습니다. 아래의 매개 변수는 가장 쉬운 방법 중 하나입니다.

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["intranetv2"].ConnectionString)) 
{ 
    SqlCommand cmd = new SqlCommand("insert into [MyBase].[Dbo].[LogErrors] (Username, StackTrace, ShortDescription, DetailDescription, ErrorType) VALUES (@Login, @Stack, @Message, @Txt, @Source)", conn); 

    conn.Open(); 

    cmd.Parameters.AddWithValue("@Login", user.Login); 
    cmd.Parameters.AddWithValue("@Stack", ex.StackTrace); 
    cmd.Parameters.AddWithValue("@Message", ex.Message); 
    cmd.Parameters.AddWithValue("@Txt", Txt); 
    cmd.Parameters.AddWithValue("@Source", ex.Source); 

    return cmd.ExecuteNonQuery(); 
}