参数问题,而在C#中运行SQL查询

参数问题,而在C#中运行SQL查询

问题描述:

错误:参数问题,而在C#中运行SQL查询

的SqlParameterCollection仅接受非空的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(); 

我收到异常,当我将参数添加到命令..你能让我知道错误..

+0

一天的免费提示:我会尽量避免传统风格的JOIN的通过只是有'从菜单中,aspnet_Users,aspnet_Paths, aspnet_PersonalizationPerUser' - 这是非常危险的,如果你在WHERE子句中错过了一个JOIN条件,你最终会得到一个笛卡尔积!此外:您的实际WHERE子句会被不必要的条件混淆,而这些条件只能用作JOIN条件..... –

+0

而是使用ANSI标准的JOIN语法,该语法明确标记了JOIN的类型,并具有它所属的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 ON ppu.UserId = u.userId WHERE Menu.Parentitem = @mp AND aspnet_Users.UserName ='admin'' –

更改此:

cm.Parameters.Add(mp); 

这样:

cm.Parameters.Add(parameter);