参数问题,而在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();
我收到异常,当我将参数添加到命令..你能让我知道错误..
答
更改此:
cm.Parameters.Add(mp);
这样:
cm.Parameters.Add(parameter);
一天的免费提示:我会尽量避免传统风格的JOIN的通过只是有'从菜单中,aspnet_Users,aspnet_Paths, aspnet_PersonalizationPerUser' - 这是非常危险的,如果你在WHERE子句中错过了一个JOIN条件,你最终会得到一个笛卡尔积!此外:您的实际WHERE子句会被不必要的条件混淆,而这些条件只能用作JOIN条件..... –
而是使用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'' –