【发布时间】:2014-05-20 17:57:19
【问题描述】:
我有一个执行 SqlCommand 并将结果返回给 winforms 应用程序的方法。 我的方法是这样的:
public bool ApplyRoles(string roleApp, string roleAppPassword)
{
Command = new SqlCommand("EXEC sp_setapprole @roleApp, @rolePassword", Connection);
AssignParam("roleApp", roleApp, SqlDbType.VarChar);
AssignParam("rolePassword", roleAppPassword, SqlDbType.VarChar);
bool ret = Command.ExecuteNonQuery() == -1;
return ret;
}
AssignParam 方法是这样的:
public void AssignParam(string name, object value, SqlDbType type)
{
var parameter = new SqlParameter(name, type)
{
Value = value ?? DBNull.Value
};
Command.Parameters.Add(parameter);
}
现在,这个 ApplyRoles 方法抛出异常:Application roles can only be activated at the ad hoc level. 但如果我将 ApplyRoles 更改为:
public bool ApplyRoles(string roleApp, string roleAppPassword)
{
Command = new SqlCommand(string.Format("EXEC sp_setapprole '{0}', '{1}'", roleApp, roleAppPassword), Connection);
bool ret = Command.ExecuteNonQuery() == -1;
return ret;
}
该方法运行良好.. 所以我猜测问题出在AssignParam 方法中。
问题是什么?我不想使用“工作”方法,因为我可以对其进行 sql 注入。
【问题讨论】:
-
我没有看到错误,但你为什么不使用调用 proc 的正常方式?省略
EXEC的东西。 -
你的意思是
new SqlCommand("sp_setapprole", Connection)?但是当我设置AssignParam方法时.NET 如何识别@roleApp和@rolePassword? -
你必须设置
CommandType.StoredProcedure。请参阅下面我对您的根本问题的回答。
标签: c# winforms sqlcommand sqlparameter