我有一個執行SqlCommand並將結果返回給winforms應用程序的方法。 我的方法是這樣的:在EXEC sp_setapprole中處理SqlParameter中的單引號?
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'的東西。 – usr
你的意思是'新的SqlCommand(「sp_setapprole」,連接)'?但是當我設置'AssignParam'方法時.NET如何識別'@ roleApp'和'@ rolePassword'? –
你必須設置'CommandType.StoredProcedure'。查看我的答案,下面是你的根本問題。 –