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