2011-08-15 4 views
0

오류 :매개 변수 문제 동안 C#에서 실행되는 SQL 쿼리

SqlParameterCollection는 null 이외의 SqlParameter에 유형의 객체가 아닌 문자열이 내가지고있어 오류입니다

개체를 받아들 때 내가 명령에 매개 변수를 추가 해요 예외를 받고 있어요

MenuItem masterItem = new MenuItem((string)masterRow["Parentitem"]); 
string mp =(string) masterItem.Value; 

SqlParameter parameter = new SqlParameter(); 
parameter.ParameterName = "@mp"; 

parameter.SqlDbType = SqlDbType.NVarChar; 
parameter.Direction = ParameterDirection.Input; 
parameter.Value = mp; 

string q = "select aspnet_PersonalizationPerUser.hasRights from Menu, aspnet_Users, 
      aspnet_Paths, aspnet_PersonalizationPerUser 
      where Menu.Parentitem = @mp 
      and Menu.Url = aspnet_Paths.Path 
      and aspnet_Paths.PathId = aspnet_PersonalizationPerUser.PathId 
      and aspnet_Users.UserName ='admin' 
      and aspnet_PersonalizationPerUser.UserId = aspnet_Users.userId "; 

SqlCommand cm = new SqlCommand(q, conn); 
cm.Parameters.Add(mp); 
string b = (string)cm.ExecuteScalar(); 

이 코드를 실행 .. u는 나에게 실수를 알려주세요 ..

+0

무료 팁 : 저는 기존 스타일을 피하려고 것, 바로 '메뉴에서, aspnet_Users, aspnet_Paths을함으로써의 가입 aspnet_PersonalizationPerUser' - 이것은 매우 위험합니다. WHERE 절에서 하나의 JOIN 조건을 놓친 경우에는 데카르트 제품으로 끝납니다! 또한 실제 WHERE 절은 JOIN 조건으로 만 작동하는 불필요한 조건들로 어수선하게 정리됩니다 ..... –

+0

대신 JOIN 유형을 명확하게 표시하고 그것이 속한 JOIN 조건을 가지고있는 ANSI 표준 JOIN 구문을 사용하십시오 - 읽기가 훨씬 쉬워졌습니다! (또한 테이블 별칭을 사용하면 쿼리를 훨씬 쉽게 읽을 수 있습니다.) : 'FROM dbo.Menu m INNER JOIN dbo.aspnet_Paths p ON m.Url = p.Path INNER JOIN dbo.aspnet_PersonalizationPerUser ppu ON p.PathId = ppu.PathId INNER JOIN dbo.aspnet_Users usr ppu.UserId = u.userId 여기서 Menu.Parentitem = @mp AND aspnet_Users.UserName = 'admin'' –

답변

3

변경이이에

cm.Parameters.Add(mp); 

: 오늘의

cm.Parameters.Add(parameter);